我正在创建一个流程,如下所示:
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脚本不再运行。
最佳答案
您运行的命令是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();
关于Java进程立即退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38212411/