我需要能够从java内部启动和停止外部程序。我开始工作很好但是当我停止它时,它会杀死它的父母。事实证明,我正在开始的过程是使用kill 0来杀死整个进程组。是否有人知道如何使它成为我的java进程不在子程序的进程组中?
答案 0 :(得分:2)
所以我猜有两个答案:
1)创建子进程作为新进程组的组长。在Linux中,我可以使用
在命令行上执行此操作bash -c "command <args>"
然后,您可以使用以下命令检查新进程的进程组是否与您运行命令的终端不同:
ps -efj
'j'选项显示进程组ID(PGID)。
我会警告你,为了让它从Java正确运行,你可能不得不逃避奇怪的事情,因为带有参数的命令需要引号,这些命令通过'-c'选项传递给'bash'命令。所以在Java中我猜它看起来像这样:
Process processWithNewProcessGroup = Runtime.getRuntime().
exec("bash -c \"sleep 60\"");
2)更改您的子进程,使其不会终止其进程组中的所有内容。