Linux进程组示例

Linux进程组示例

进程组是什么,已经有人问过并回答过这里:

进程组是可以同时发出信号的相关进程的集合。

不幸的是,没有现实世界的例子来说明如何以及何时启动“一系列可以立即发出信号的相关进程”。

这里有人能给我一些代码示例,说明他在哪里启动进程组并使用 杀死其中的所有进程kill -- -0吗?

例如,apache web 服务器及其子进程是否会成为一个进程组,当主进程被杀死时,进程组内的其余 PID 也会被杀死?

答案1

现实世界中有很多例子;some_app从链接的问题可以是ls或者cat或者 更复杂的例子

$ ps axo ppid,pid,pgid,command | grep $$
41613  2926  2926 mksh -l
 2926 14131 14131 ps axo ppid,pid,pgid,command
 2926 14132 14131 grep 2926
$ 

这表明 shell ( mksh) 已启动一个新的进程组 ( 14131),其成员为1413114132。如果不是因为它们不徘徊,它们可能会被发出信号;为此,您需要sleep某种形式的阻止

$ perl -e 'warn $$; sleep 999' | perl -ne 'sleep 999'
14148 at -e line 1.

然后你可以跑去其他地方kill -- -14148杀死那群人。

答案2

例子:

$ ( sleep 100 & sleep 100 & sleep 100 & )
$ ps -Ao pid,pgid,command | grep sleep
19734 19733 sleep 100
19735 19733 sleep 100
19736 19733 sleep 100
19789 19788 grep sleep

()创建一个新的子shell(至少在Bash中),它将成为所有启动进程的进程组领导者(IOW:shell将创建一个新的子shell,其PID将是所有三个睡眠的PGID,它将异步执行在后台)。

要消除那些睡眠,只需键入即可kill -19733

另一个例子:

$ cat script1.sh 
sleep 100 &
./script2.sh

$ cat script2.sh 
sleep 100 &

$ ./script1.sh 
$ ps -Ao pid,pgid,command | grep sleep
21605 21604 sleep 100
21607 21604 sleep 100
21618 21617 grep sleep

或者sleep 10 | sleep 20 | sleep 30 | sleep 40 &也将共享相同的 PGID。

相关内容