Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说PCB进程控制块,希望能够帮助你!!!。
PCB 重要成员
每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体,定义在 /usr/src/linux-headers-4.15.0-142-generic/include/linux/sched.h
内核头文件中(使用 uname -r
指令查询 linux 版本),其内部有很多成员,我们重点掌握以下几部分即可。
- pid:进程id,系统中每个进程有唯一的id,使用 pid_t 类型表示。注意每个线程的pid都不相同。
- tgid:thread group id,linux引入线程组的概念。一个线程组所有线程与领头线程具有相同的pid,存入tgid字段,getpid()返回当前进程的 tgid 值而不是 pid 的值。
- 进程的状态:
- 就绪(初始+就绪):等CPU分配时间片
- 运行:占用CPU
- 挂起:等待除CPU以外的其它资源,主支放弃CPU
- 停止:程序运行停止
- 进程切换时需要保存和恢复的一些CPU寄存器。
- 描述虚拟地址空间的信息。
- 描述控制终端的信息。
- 当前工作目录。
- umask掩码。
- 文件描述符表,包含很多指向file结构体的指针。
- 和信号相关的信息。
- 用户id和组id。
- 会话(Session)和进程组:
- 进程组:一组相关进程的集合;
- 会话:一组相关进程组的集合;
- 进程可以使用的资源上限(Resource Limit)。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。