我试图在后台运行一个shell脚本,当我的函数/进程结束时它不会终止。然而,似乎尽管nohup,当java线程结束时。脚本也是如此。
以下是示例代码。
///
/// Tries to run a script in the background
///
try {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("nohup sh ./runner.sh > output.txt &", new String[] {}, wrkDir);
// pr.waitFor(); // Intentionally not using
} catch(Exception e) {
throw new RuntimeException(e);
}
答案 0 :(得分:1)
nohup
适用于shell的调用,而不适用于调用程序。
可能有很多方法可以解决这个问题,但需要考虑的是尝试修改Java代码以调用调用nohup runner.sh...
代码的启动程序shell脚本(无需启动{{1 }})。
像这样(未经测试的)代码:
修订版Java:
sh
<强> launcher.sh 强>
///
/// Tries to run a script in the background
///
try {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("sh ./launcher.sh", new String[] {}, wrkDir);
// pr.waitFor(); // Intentionally not using
} catch(Exception e) {
throw new RuntimeException(e);
}
我不确定这里的重定向,但是如果这样做(正如我所提到的,这个解决方案未经测试),那么缺点是你会因尝试调用#!/bin/sh
nohup ./runner.sh > output.txt &
而失去反馈 - 任何错误该脚本调用对您的Java进程不可用。