如何 运行 一个进程在 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)
以其他方式处理它。
我有一个 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)
以其他方式处理它。