为了理解Linux中进程组的工作机制,做如下练习。
摘自APUE:通常,它们与同一作业相关联。
首先在shell中执行命令生成一个后台作业:
cat | ls &
再执行
ps -o pid,ppid,pgrp,sess,comm
结果如下:
PID PPID PGRP SESS COMMAND
2490 2477 2490 2490 bash
3528 2490 3528 2490 cat
3529 2490 3528 2490 ls
3531 2490 3531 2490 ps
apue:组长进程的标识是,其进程组ID等于其进程ID。
由此看,3528(cat)是组长进程.
apue:只要在某个进程组中有一个进程存在,则该进程组就存在,这与其组长进程是否终止无关。验证如下:
kill -KILL 3528
结果如下:
PID PPID PGRP SESS COMMAND
2490 2477 2490 2490 bash
3529 2490 3528 2490 ls
3531 2490 3531 2490 ps
由此看到,虽然组长进程3528(cat),已经终止,但进程组3528还是存在的。
apue:可以接收来自同一终端的各种信号。
kill -KILL -3528
这样便可以终止进程组3528中的所有进程
apue:pid<0 将信号发送给其进程组ID等于pid的绝对值。
结果如下:
PID PPID PGRP SESS COMMAND
2490 2477 2490 2490 bash
3531 2490 3531 2490 ps