前言
今天跟大家分享Linux中进程的相关知识。
1. 进程控制块
进程控制块(Process Control Block, PCB)是对并发进程进行控制和管理的数据结构,在Linux内核中由task_struct结构体定义的。PCB中存放了描述进程和控制进程运行的所有信息,部分信息如下: (1)进程标识符 (2)进程当前状态 (3)进程的程序和数据地址 (4)进程资源清单 (5)进程优先级 (6)CPU现场保护区 (7)用于实现进程间通信所需信息 (8)其他信息:父进程的PID, 有效用户ID,有效组ID, 进程占用CPU的时间,进程退出码、当前目录节点,执行文件节点等
Linux内核将所有进程控制块组织成指针数组形式:
struct task_struct *task[NR_TASK];
上述指针数组即为Linux维护的进程表,每个指针指向一个PCB。NR_TASK规定了最多可同时运行进程的个数。
2. 三个特殊的进程
(1)PID为0的调度进程,是内核的一部分,又称为交换进程或系统进程; (2)PID为1的init 进程。该进程是在系统自举过程(自举过程:即上电自检,内核检查PC都有哪些硬件,加载硬件驱动,并运行第一个进程)结束时由内核调用,对应的程序文件为/sbin/init。init进程是由内核启动并运行的第一个用户进程。init进程绝不会终止,是一个普通的用户进程,但是以超级用户特权运行。 (3)PID为2de kthreadd内核进程,也是一个内核线程。内核线程是独立运行在内核空间的标准进程,和普通进程间的区别在于内核线程没有独立的地址空间,从不会切换到用户空间。
PID为0的进程是其他所有进程的祖先进程; init进程是所有其他用户进程的祖先进程; kthreadd内核线程是其他所有内核线程的父进程。
使用“pstree”和“”ps ax -o pid, ppid, command”命令查看进程间的父子关系。
3. 进程的状态
总结
关于进程的知识点就介绍到这里,上面描述如有问题,还请指正!
参考文献
《Linux环境编程》
|