标签:
不同的shell对使用管道线时创建子进程的顺序不同,本文以bash为例,它是支持作业控制的shell的典型代表。
僵尸进程:先于父进程终止,但是父进程没有对其进行善后处理(获取终止子进程有关信息,释放它仍占有的资源)。消灭僵尸进程的唯一方法是终止其父进程。
孤儿进程:该进程的父进程先于自身终止。其特点是PPID=1(init进程的ID)。一个孤儿进程可以自成孤儿进程组。
PID = 进程ID (由内核根据延迟重用算法生成)
PPID = 父进程ID(只能由内核修改)
PGID = 进程组ID(子进程、父进程都能修改)
SID = 会话ID(进程自身可以修改,但有限制,详见下文)
TPGID= 控制终端进程组ID(由控制终端修改,用于指示当前前台进程组)
进程属于一个进程组,进程组属于一个会话,会话可能有也可能没有控制终端
一个或多个进程的集合,进程组属于一个会话。fork()并不改变进程组ID。
echo "hello" | cat
,bash以第一个命令的进程ID为该管道线内所有进程设置进程组ID。此时echo
和cat
的进程组ID都设置成echo
的进程ID。[1] 可以通过使用stty tostop
命令禁止后台进程组向终端进行写操作,当发出写请求时,将会收到SIGTTOU信号。
(lesca原创,转载请注明转自http://lesca.me)
(转)进程间关系:进程、僵尸进程、孤儿进程、进程组、前台进程组、后台进程组、孤儿进程组、会话、控制终端
标签:
原文地址:http://www.cnblogs.com/buptlyn/p/3992088.html