我有一个 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 代码
问题是,一旦 Java 程序执行完毕,所有子进程都会关闭,Ruby 脚本也是如此。
在 *nix 系统上(POSIX https://en.wikipedia.org/wiki/POSIX真的,包括 Debian Linux)该进程被发送HUP signal https://en.wikipedia.org/wiki/SIGHUP (SIGHUP
or hangup) 当其父进程结束时。您可以使用nohup(1) http://linux.die.net/man/1/nohup当您启动子进程时的命令ignore the hangup来自child过程。
或者, 你可以潜在地利用红宝石Signal Module http://ruby-doc.org/core-2.2.0/Signal.html并使用Signal.trap(HUP)
以其他方式处理它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)