linux中的进程代表着处于执行期的程序以及它所管理资源的总称,因此,进程与程序是两码事,task_str是linux内核的一种数据结构,会被装载到RAM里并且包含着进程的信息,linux中每一个进程都由一个task_struct结构体来定义,即我们所说的PCB,是对进程控制的唯一有效手段,了解task_struct的结构是非常有用的,每一个进程都把它的信息放到task_struct这个数据结构里,task_struct包含以下内容:
(1)进程状态:记录进程在等待、运行或死锁
(2)进程标识符:描述本进程的唯一标识符,用来区别其他进程
(3)优先级:相对于其他进程的优先级
(4)程序计数器:程序中即将被执行的下一条指令的地址
(5)内存指针:包含程序代码和进程相关数据的指针,还有其他进程共享的内存块的指针
(6)上下文数据:进程执行时处理器的寄存器中的数据
(7)I/0状态信息:包含显示的I/0请求,分配给I/0设备和被进程使用的文件列表
(8)记账信息:包含处理器的时间总和,使用的时钟数总和,时间限制,记账号等;
保存进程信息的数据结构叫做task_struct,并且可以在include/linux/sched.h里找到它,所有运行在系统里的进程都以task_struct链表的形式存在内核里;
可通过ps aux[axj] | grep 进程id 查看进程信息
下面给出task_struct中的部分成员介绍:
1.调度数据成员
(1)volatile long states;(表示进程当前状态)
TASK_RUNNING(就绪):正在运行或在就绪队列中准备运行的进程
TASK_INTERRUPTIBLE(浅度睡眠):处于等待队列中的进程,资源有效时唤醒,也可由其它进程通过信号或定时中断唤醒后进入就绪队列
TASK_UNINTERRUPTIBLE(深度睡眠):处于等待队列中的进程,资源有效时唤醒,不可由其它进程通过信号或定时中断唤醒
TASK_STOPPED(暂停):进程被暂停,原因有二,一是对收到SIGSTOP、SIGSTP、SIGTTIN或SIGTTOU信号的反应,二是受其它进程的ptrace系统调用的控制而暂时将 CPU交给控制进程
TASK_ZOMBIE(僵死):表示进程结束但尚未消亡的一种状态(僵死状态),进程已结束运行且释放大部分资源,但尚未释放进程控制块
TASK_SWAPPING:进程页面被交换出内存的进程
(2)unsigned long flags;(进程标志)
PF_PTRACED:被ptrace系统调用监控
PF_TRACESYS:正在跟踪
PF_FORKNOEXEC:进程刚创建,但还未执行
PF_SUPERPRIV:超级用户特权
PF_SIGNALED:进程被信号(signal)杀死
PF_STARTING:进程正被创建
PF_EXI