Java Process立即退出

时间:2016-07-05 20:45:53

标签: java python

我正在创建一个流程如下:

Process p = Runtime.getRuntime().exec("nohup /usr/bin/python " + filePath + " &");
Process q = Runtime.getRuntime().exec("/usr/bin/python -m -webbrowser " + url);

我正在尝试在后台运行p,以便q可以毫无问题地运行。此外,当Java程序结束时,python脚本不再运行。

3 个答案:

答案 0 :(得分:1)

您运行的命令是nohup,它立即退出。 nohup 启动了单独的Python流程,但这不是流程p正在控制的。

如果这不是您想要的功能,为什么使用nohup&?如果您只想执行Python子进程,只需调用:

Process p = Runtime.getRuntime().exec("/usr/bin/python " + filePath);

请注意,使用带有数组的exec重载也更安全,因此您不必自己进行字符串连接(因此避免使用某种类型的安全漏洞)。语法略有改动:

Process p = Runtime.getRuntime().exec(new String[]{"/usr/bin/python", filePath});

ProcessBuilder

Process p = new ProcessBuilder("/usr/bin/python", filePath).start();

答案 1 :(得分:0)

查看&运算符here的文档。您的进程正在后台运行。对于您正在编写的Java程序(以及shell,就此问题而言),您所做的调用已经结束。它肯定仍然在后台运行,但你告诉shell(以及扩展你的Java程序)不要注意输出并继续前进。

答案 2 :(得分:0)

正如Sean Bright提到的那样,'&'正在运行的脚本末尾的字符。基本上在所有* nix系统上。如果你调用一个类型命令并使用&符号,它将在后台运行该进程。这就是为什么对java进程的调用返回完成的原因。

最好不要在后台执行命令(不是'&'),只是定期调用Process.isAlive()来确定进程是否完成。