java – Runtime.getRunTime().exec的行为与C语言“system()”命令不同
作者:互联网
在“C”中,我可以在启动过程退出后在后台运行一个长时间的阻塞过程(并且它已经继续运行).
void main(void)
{
system("some_long_blocking_process &");
exit();
}
// "some_long_blocking_process" is still running here (DESIRED BEHAVIOR)
Java的getRuntime().exec()没有这种行为.相反,“some_long_blocking_process”在Java进程结束时立即结束.
任何人都知道如何在Java中重新捕获这种行为?
>我使用的是Java 1.4(无流程构建器)
>我特别希望启动长阻塞过程并立即退出(没有“waitFor()等”)
>我已经尝试过的事情(过程运行正常,但我仍然得到相同的不良行为)
>添加“nohup”并在前台运行(“nohup some_long_process”)
>添加“nohup”并在后台运行(“nohup some_long_process&”)
>在前台运行(“some_long_process”)
>在后台运行(“some_long_process&”)
谢谢!
感谢所有的建议…我决定使用jtahlborn的答案(它对我有用)
解决方法:
我们用java实现这一目标的唯一方法是添加另一层脚本.你需要一个简单的包装器脚本来调用你真正想要运行的应用程序,例如:
runner.sh:
#!/bin/sh
nohup "$@" > /dev/null 2>&1 &
然后从你的java程序中调用“/ bin / sh runner.sh the real command”.
标签:java,runtime-exec 来源: https://codeday.me/bug/20190610/1209563.html