编程语言
首页 > 编程语言> > java – Runtime.getRunTime().exec的行为与C语言“system()”命令不同

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