![Linux内核深度解析](https://wfqqreader-1252317822.image.myqcloud.com/cover/741/30210741/b_30210741.jpg)
上QQ阅读APP看书,第一时间看更新
2.4 进程关系
进程1分叉生成进程2,进程1称为父进程,进程2称为子进程。
进程1多次分叉生成进程2和进程3,进程2和进程3的关系是兄弟关系。
如图2.4所示,一个进程的所有子进程被链接在一条子进程链表上,头节点是父进程的成员children,链表节点是子进程的成员sibling。子进程的成员real_parent指向父进程的进程描述符,成员parent用来干什么呢?如果子进程被某个进程(通常是调试器)使用系统调用ptrace跟踪,那么成员parent指向跟踪者的进程描述符,否则成员parent也指向父进程的进程描述符。
![](https://epubservercos.yuewen.com/A23B56/16568261904470706/epubprivate/OEBPS/Images/figure_0037_0001.jpg?sign=1738932499-dcro3cdpLDiCbX0WQXiLfTFQFSCRpFSq-0-cb13c41f6143f619cb7b05d939631054)
图2.4 父子进程
如图2.5所示,进程管理子系统把所有进程链接在一条进程链表上,头节点是0号线程的成员tasks,链表节点是每个进程的成员tasks。对于线程组,只把组长加入进程链表。
![](https://epubservercos.yuewen.com/A23B56/16568261904470706/epubprivate/OEBPS/Images/figure_0037_0002.jpg?sign=1738932499-edqqmDuI75syW09ZmC3KLEeZAW65cNds-0-7b0a64786394cb95e0eafcd930996d73)
图2.5 进程和线程链表
一个线程组的所有线程链接在一条线程链表上,头节点是组长的成员thread_group,链表节点是线程的成员thread_group。线程的成员group_leader指向组长的进程描述符,成员tgid是线程组标识符,成员pid存放自己的进程标识符。