4

我需要能够从 java 内部启动和停止外部程序。我开始工作得很好,但是当我停止它时,它会杀死它的父母。事实证明,我正在启动的进程正在用 kill 0 杀死它的整个进程组。有谁知道如何使我的 java 进程不在子程序的进程组中?

4

1 回答 1

3

所以我想有两个答案:

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)更改您的子进程,使其不会杀死其进程组中的所有内容。

于 2011-03-02T14:24:46.640 回答