程序创建的进程具有父/子关系。如果一个进程创建多个子进程时,则子进程之间具有兄弟关系。进程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》里抓取     

       进程篇之进程间的关系--内核2.6.11

 

        

 大大的疑问:  p1的 sibling.prev怎么指向了父进程啊?同理 p3的sibling.next也指

向了父进程。 这个图跟内核2.4里差别很大呀。期待高手给解答啦进程篇之进程间的关系--内核2.6.11

 

相关文章:

  • 2022-03-04
  • 2021-07-16
  • 2022-12-23
  • 2021-11-10
  • 2022-01-10
  • 2021-12-09
  • 2022-01-09
猜你喜欢
  • 2022-12-23
  • 2021-06-02
  • 2021-11-05
  • 2022-12-23
  • 2021-05-25
  • 2021-12-11
相关资源
相似解决方案