今天跟大家分享Linux中进程的相关知识。
进程控制块(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规定了最多可同时运行进程的个数。
(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”命令查看进程间的父子关系。
关于进程的知识点就介绍到这里,上面描述如有问题,还请指正!
《Linux环境编程》