文章系列
进程类型
进程与线程(轻量级进程)
借用情景分析中的定义,本小节来介绍linux内核中的进程与线程,在linux中进程都具有下列四个要素:
1. 有一段程序供其执行,这段程序不一定是进程所专有,可以与其他进程共用
2. 有进程专用的系统堆栈空间
3. 有自己独立的task_struct数据结构
4. 有独立的存储空间,意味着有专用的用户空间
上述四个要素缺一条就不成其为进程,如果只具备前三个要素那个称为线程,也可以看作是个轻量级进程;特别地,如果完全没有用户空间就称为内核线程,而如果共享用户空间则称为用户线程。
进程组
进程组是一个或多个进程的集合。
线程组
线程组是多个线程的集合。
会话组
会话组是一个或多个进程组的集合。
进程关系
进程、线程、进程组、线程组的关系可以看下图:
上图进程P0创建了子进程P1、P2和P3,那么进程P1、P2和P3的父进程为P0,进程P0、P1、P2和P3组成了一个进程组(如果进程P0是这个进程组的组长)。
子进程P2创建了线程T1、T2和T3,那么进程P2就可以看作这三个线程的线程组组长T0,线程T0、T1、T2和T3组成了一个线程组。
上图中进程描述符的相关字段解释如下:
字段 | 说明 |
---|---|
real_parent | 指向创建本进程的描述符,如果父进程不存在,就指向init进程的描述符 |
parent | 它的值通常与real_parent一致,但偶尔不同 |
children | 一个链表,指向创建的子进程 |
sibling | 指向兄弟进程 |
group_leader | 指向线程组组长的描述符 |
thread_group | 线程组链表的连接头 |