1. 什么是进程
进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。
⼴义上,所有的进程信息被放在⼀个叫做进程控制块(PCB)的数据结构中,可以理解为进程属性的集合。这个数据结构叫做task_struct。
2. task_struct结构体
task_struct是Linux内核的⼀种数据结构,它会被装载到RAM⾥并且包含着进程的信息。每个进程都把它的信息放在 task_struct 这个数据结构⾥,task_struct 包含了这些内容:
task_struct是Linux内核的⼀种数据结构,它会被装载到RAM⾥并且包含着进程的信息。
每个进程都把它的信息放在 task_struct 这个数据结构⾥,task_struct 包含了这些内容:
标示符:描述本进程的唯一标符,用来区别其他进程。
状态:任务状态,退出代码,退出信号等。
优先级:相对于其他进程的优先级。
程序计数器:程序中即将被执行的下⼀条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
上下文数据:进程执行时处理器的寄存器中的数据。
I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
保存进程信息的数据结构叫做task_struct,并且可以在include/linux/sched.h ⾥找到它。所有运⾏在系统⾥的进程都以task_struct 链表的形式存在内核⾥。
long state //任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)。
long counter //任务运行时间计数(递减)(滴答数),运行时间片。
long priority //运行优先数。任务开始运行时counter = priority,越大运行越长。
long signal //信号。是位图,每个比特位代表一种信号,信号值=位偏移值+1。
struct sigaction sigaction[32] //信号执行属性结构,对应信号将要执行的操作和标志信息。
long blocked //进程信号屏蔽码(对应信号位图)。
int exit_code //任务执行停止的退出码,其父进程会取。
unsigned long start_code //代码段地址。
unsigned long end_code //代码长度(字节数)。
unsigned long end_data //代码长度 + 数据长度(字节数)。
unsigned long brk //总长度(字节数)。
unsigned long start_stack //堆栈段地址。
long pid //进程标识号(进程号)。
long father //父进程号。
long pgrp //父进程组号。
long session //会话号。
long leader //会话首领。
unsigned short uid //用户标识号(用户id)。
unsigned short euid //有效用户id。
unsigned short suid //保存的用户id。
unsigned short gid //组标识号(组id)。
unsigned short egid //有效组id。
unsigned short sgid //保存的组id。
long alarm //报警定时值&