如何使用相同的进程组 ID 运行多个进程?

如何使用相同的进程组 ID 运行多个进程?

我正在学习如何使用killpg 系统调用。因此,为了进行实验,我想使用相同的 pgid 启动两个新进程,然后尝试使用killpg 杀死它们。

我读到了关于setsid的内容,所以我尝试了类似的方法:

setsid gedit & firefox &

但是这两个进程:gedit 和 firefox 最终有两个不同的 pgid。

答案1

如果可以的话,打开 Firefox 和其中的几个选项卡。然后执行以下操作:

ps o pid,ppid,pgid,sid,comm

你应该看到这样的东西:

  PID  PPID  PGID   SID COMMAND
 5121 25145  2628  2628 Web Content
 5881 25145  2628  2628 Web Content
25145     1  2628  2628 firefox-esr

或者使用子 shell 来生成后台进程:

$ (sleep 100& gedit&)
$ ps o pid,ppid,pgid,sid,comm
  PID  PPID  PGID   SID COMMAND
 6365  2618  6364 27631 sleep
 6366  2618  6364 27631 gedit

这里很好地解释了为什么需要子 shell 以及发生了什么:为什么我的子进程的 PGID 不是父进程的 PID?

另请参阅:

man credentials

相关内容