【发布时间】:2016-01-17 18:01:18
【问题描述】:
我有一个 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 代码
【问题讨论】:
-
使用
nohup启动进程。 -
@ElliottFrisch
nohup是不是类似于screen? Ruby 执行完毕后 nohup 进程会终止吗? -
可能有一些特定于环境的设置。例如,如果我需要在windows中运行'cmd.exe',我需要提供:
String commands[] = {"C:/Windows/System32/cmd.exe","/c","start","C:/users/amber/desktop/temp.bat"};这是temp.batSet COUNTER=0 echo off :loop if %COUNTER%==3 set COUNTER=0 if %COUNTER%==2 set COUNTER=3 if %COUNTER%==1 set COUNTER=2 if %COUNTER%==0 set COUNTER=1 ping 127.0.0.1 -n 2 > nul echo %COUNTER% goto loop -
@ElliottFrisch 好的,谢谢你解决了我的问题。你想把它写成答案让我接受吗?
标签: java processbuilder