1. 前言
限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。
2. 背景
本文基于 Linux 4.14
内核源码进行分析。
3. 图解进程树
3.1 初始状态
初始系统中只有 init_task
祖先进程,此时进程树的状态如下:
3.2 经 kthread() 或 fork() 创建第1个进程后
经 kernel_thread()
或 __kthread_create_on_node()
或 fork()
或 vfork()
创建第1个进程后,进程树由上一小节中的图示变为下图的状态:
3.3 经 clone() 创建第2个进程后
在上一小节的基础上,在第1个进程里调用 clone(CLONE_THREAD, ...)
创建第2个进程后,进程树状态如下:
4. 后记
了解进程树的结构,对于了解调度子系统是有益的,譬如理解进程的退出终止过程、信号处理相关逻辑都会带来好处。
5. 扩展
本篇没有展示 进程组、session、namespace
等,感兴趣的读者可自行查阅相关资料。