进程篇之进程间的关系--内核2.6.11
程序创建的进程具有父/子关系。如果一个进程创建多个子进程时,则子进程之间具有兄弟关系。(进程0是在系统初始化时由kernel自身从无到有创建。进程0最终会通过调用kernel_thread创建一个内核线程去执行init函数,这个新创建的内核线程即Process 1,《Understanding The Linux Kernel - Third Edtion》里说 进程1是所有进程的祖先?对此我保持怀疑态度。)在进程描述符中引入了几个字段来表示这些关系。
以下のとおりです:
进程亲属关系的字段描述(p是给定进程)
字段名 说明
real_parent 指向创建了p的进程描述符,如果p的父进程不再存在,就指向进程1(init)的描述符。(对此也有疑问:父进程销毁前,不都是先销毁子进程的?)
parent 指向p的当前父进程(这种进程的子进程终止时,必须向父进程发信号。)它的值通常与real_parent一致,但偶尔也可以不同,例如:当另一个进程发出监控p的ptrace()系统调用请求时。
children 链表的头部,链表中所有元素都是p创建的子进程
sibling 指向兄弟进程链表中的下一个元素或前一个元素的指针,这些兄弟进程的父进程都是p
下图:《Understanding The Linux Kernel - Third Edtion》里抓取
大大的疑问: p1的 sibling.prev怎么指向了父进程啊?同理 p3的sibling.next也指
向了父进程。 这个图跟内核2.4里差别很大呀。期待高手给解答啦!