如何 运行 一个进程在 Java 中完全分离

How to run a proccess completely seperate in Java

我有一个 Java 程序,它使用 ProcessBuilder 启动另一个进程,如下所示:

String commands[] = {"ruby", "/home/scripts/script.rb"};
ProcessBuilder builder = new ProcessBuilder(commands);
Map<String,String> map = builder.environment();
map.put("TYPE", "sometype");
try {
    builder.start();
} catch (IOException e) {
    e.printStackTrace();
}

进程开始执行一段时间后(一个不应终止的小 Ruby 脚本),Java 程序退出。

问题是,一旦 Java 程序执行完毕,所有子进程都会关闭,Ruby 脚本也会关闭。

我发现了一些类似的问题,但答案总是,进程是独立的。但在我的情况下不是这样,如果 Java 程序退出,Ruby 代码将始终停止执行。

我用 Java 8u66

在 Debian Jessie 系统上尝试了 Java 代码

尝试使用Process.getOutputStream,用运行等待进程的输出Ruby,如果太花时间,那么你可以运行在背景也是。

The problem is, once the Java program finishes executing, all sub-processes are closed, also the Ruby Script.

在 *nix 系统上(POSIX really, including Debian Linux) the process is sent a HUP signal (SIGHUP or hangup) when its' parent process ends. You can use the nohup(1) 当您启动一个子进程时命令 忽略 来自 hangup =]child process.

或者,您可以可能利用RubySignal Module并使用Signal.trap(HUP) 以其他方式处理它。