如何在Java

时间:2016-01-17 18:01:19

标签: java processbuilder

我有一个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代码

2 个答案:

答案 0 :(得分:1)

  

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

在* nix系统上(POSIX真的,包括Debian Linux),当进程的父进程发送HUP signalSIGHUP挂断)时结束。当您从进程启动子进程忽略 hangup 时,可以使用nohup(1)命令。

,您可以潜在使用Ruby Signal Module并使用Signal.trap(HUP)以其他方式处理它。

答案 1 :(得分:-1)

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