在 Linux 内核 中 , " 进程控制块 " 是通过 task_struct
结构体 进行描述的 ; Linux 内核中 , 所有 进程管理 相关算法逻辑 , 都是基于 task_struct
结构体的 ;
task_struct
结构体在 linux-5.6.18\include\linux\sched.h
头文件中 第
~
行定义 ;
state
字段表示 进程状态 ,
-1
时表示不可执行 ,0
表示可执行 ,>0
表示已经停止 ; /* -1 unrunnable, 0 runnable, >0 stopped: */
volatile long state;
stack
是一个指针 , 指向 " 内核栈 " ;
void *stack;
pid
表示该进程的 " 全局进程号 " ;
pid_t pid;
pid_t
是 int 类型的数据 ;
typedef int __kernel_pid_t;
#ifndef __kernel_pid_t
typedef int __kernel_pid_t;
#endif
tgid
表示 " 全局线程组 " 标志 ;
pid_t tgid;
pid_links
字段 是一个 哈希表 , 其中存放的是 " 进程号 " , 是 " 进程组标识符 " 和 " 会话标识符 " ;
/* PID/PID hash table linkage. */
struct pid *thread_pid;
struct hlist_node pid_links[PIDTYPE_MAX];
struct list_head thread_group;
struct list_head thread_node;