【发布时间】:2011-07-23 01:42:56
【问题描述】:
我正在尝试从 java 内部运行一个 bash 脚本,该脚本将在 JVM 退出后继续存在。我目前的尝试看起来像这样:
String[] linCmd = {"/bin/bash", "-c", "\"set +m; shopt -u huponexit; nohup "
+ "myScript.sh 2>&1 > /dev/null &\""};
pb = new ProcessBuilder(linCmd);
//Other stuff to monitor and start pb
但我没有看到 myScript.sh 实际启动(在顶部或 ps 中)。顺便说一句,单独的 bash shell 的原因是因为我需要 set +m 并且不想用它来破坏原始文件。 nohup 和 shopt -u huponexit 也可能是多余的,但我已经尝试过不单独使用它们,但似乎无法使其正常工作。
有什么想法吗?
【问题讨论】:
-
顺便说一句,
linCmd = { "nohup", "myScript.sh", "2>&1", ">/dev/null", "&"};启动了脚本,但脚本在调用 JVM 时立即终止。 -
Java 的进程管理能力很差,因为这是固有的平台特定行为。我建议在 C 或 Perl 中执行此操作。
-
@Amir Afghani 当然,这本质上是一个特定于平台的命令......因此是“linCmd”,是的,还有一个“winCmd”版本。有时我们必须在不太理想的工具中处理依赖于平台的行为。只是野兽的本性。
-
我的意思是 Java 不擅长做这件事,并不是说你永远不应该这样做。
-
@Amir Afghani 哦,是的。绝对不是最好的工具,但它就是我所拥有的。另一方面,我偶尔也会使用螺丝刀的背面将钉子钉入石膏板,因为这是我随身携带的东西,而且并不难。
标签: java linux bash process processbuilder