【发布时间】:2014-07-31 23:52:52
【问题描述】:
我正在编写一个插件来重新启动 Linux 上的服务器应用程序(尽管我正在 OSX 上进行测试)。我这样做的方式是使用 shell 脚本命令应用程序停止,然后监督进程的终止,在时机成熟时安全地启动一个新进程。
当我从命令行手动执行脚本时,它可以工作。但是,当我在应用程序中执行它时,shell 进程与应用程序一起被杀死。
我尝试了两种从 Java 运行进程的不同方法:
String scriptArgs[] = {"sh", "restart.sh", "&"};
try {
Runtime.getRuntime().exec(scriptArgs);
} catch (IOException e) {
e.printStackTrace();
}
和
ProcessBuilder processBuilder = new ProcessBuilder("sh", "restart.sh");
try {
processBuilder.directory(new File(System.getProperty("user.dir")));
processBuilder.redirectErrorStream(false);
processBuilder.start();
} catch (IOException e) {
e.printStackTrace();
}
这两种方法都给出了相同的结果:脚本被调用,它成功地关闭了应用程序,然后它在继续之前就死了。有没有什么方法可以从 Java 中启动一个完全独立的进程?
【问题讨论】:
-
你试过 nohup 吗?
-
谢谢,我从未听说过 nohup,但这正是我所需要的。将此作为答案发布,我会接受!
标签: java linux macos shell process