我正在学习如何使用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