我有一个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代码
答案 0 :(得分:1)
问题是,一旦Java程序完成执行,所有子进程都会关闭,也就是Ruby脚本。
在* nix系统上(POSIX真的,包括Debian Linux),当进程的父进程发送HUP
signal(SIGHUP
或挂断)时结束。当您从子进程启动子进程忽略 hangup 时,可以使用nohup(1)
命令。
,您可以潜在使用Ruby Signal
Module并使用Signal.trap(HUP)
以其他方式处理它。
答案 1 :(得分:-1)
尝试使用Process.getOutputStream,等待运行Ruby的进程输出,如果花费太多时间,那么你也可以在后台运行。