
上QQ阅读APP看书,第一时间看更新
2.4 进程关系
进程1分叉生成进程2,进程1称为父进程,进程2称为子进程。
进程1多次分叉生成进程2和进程3,进程2和进程3的关系是兄弟关系。
如图2.4所示,一个进程的所有子进程被链接在一条子进程链表上,头节点是父进程的成员children,链表节点是子进程的成员sibling。子进程的成员real_parent指向父进程的进程描述符,成员parent用来干什么呢?如果子进程被某个进程(通常是调试器)使用系统调用ptrace跟踪,那么成员parent指向跟踪者的进程描述符,否则成员parent也指向父进程的进程描述符。

图2.4 父子进程
如图2.5所示,进程管理子系统把所有进程链接在一条进程链表上,头节点是0号线程的成员tasks,链表节点是每个进程的成员tasks。对于线程组,只把组长加入进程链表。

图2.5 进程和线程链表
一个线程组的所有线程链接在一条线程链表上,头节点是组长的成员thread_group,链表节点是线程的成员thread_group。线程的成员group_leader指向组长的进程描述符,成员tgid是线程组标识符,成员pid存放自己的进程标识符。