Linux进程描述符task_struct结构体详解

Linux操作系统中,每个进程都有一个task_struct结构体,用于存储进程的相关信息,如进程状态、优先级、内存指针、上下文数据、I/O状态、记账信息等。task_struct包含了进程的各种状态,如 TASK_RUNNING、TASK_INTERRUPTIBLE 等,并有标志字段表示进程创建、退出等状态。此外,还涉及进程间的信号处理、进程队列指针、时间数据成员、信号量数据成员、进程上下文环境、文件系统数据成员、内存数据成员以及支持SMP的数据成员。通过对task_struct的理解,可以深入掌握Linux内核的进程管理机制。
摘要由CSDN通过智能技术生成

在我们了解task_struct之前,让我们先来了解一个概念:“进程
一、什么是进程?
大多数情况下我们所听到最多的说法是:进程是操作系统的一种抽象概念,用来表示正在运行的程序。但值得我们注意的是:进程是一种动态描述,但是并不代表所有的进程都在运行。(进程在内存中因策略或调度需求,会处于各种状态)
二、进程控制块
每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体,它定义在include/linux/sched.h文件中。

三、task_struct
Linux内核的一种数据结构,它会被装载到RAM里并且包含着进程的信息。
每个进程都把它的信息放在 task_struct 这个数据结构里,task_struct 包含了这些内容:
标示符 : 描述本进程的唯一标示符,用来区别其他进程。
状态 :任务状态,退出代码,退出信号等。
优先级 :相对于其他进程的优先级。
程序计数器:程序中即将被执⾏行的下⼀一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下⽂文数据:进程执⾏行时处理器的寄存器中的数据。
I/O状态信息:包括显⽰示的I/O请求,分配给进程的I/O设备和被进程使⽤用的⽂文件列表。
记账信息:可能包括处理器时间总和,使⽤用的时钟数总和,时间限制,记账号等。

1、进程状态:

 volatile long state;   ////这个是进程的运行时状态,-1代表不可运行,0代表可运行,>0代表已停止

下面我们来看几种常见的进程状态:

TASK_RUNNING:正在运行或在就绪队列run-queue中准备运行的进程,实际参与进程调度。

TASK_INTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,也可由其它进程通过信号(signal)或定时中断唤醒后进入就绪队列run-queue。

TASK_UNINTERRUPTIBLE:处于等待队列中的进程,待资源有效时唤醒,不可由其它进程通过信号(signal)或定时中断唤醒。

TASK_ZOMBIE:表示进程结束但尚未消亡的一种状态(僵死状态)。此时,进程已经结束运行且释放大部分资源,但尚未释放进程控制块。

TASK_STOPPED:进程被暂停,通过其它进程的信号才能唤醒。导致这种状态的原因有二,或者是对收到SIGSTOP、SIGSTP、SIGTTIN或SIGTTOU信号的反应,或者是受其它进程的ptrace系统调用的控制而暂时将CPU交给控制进程。

TASK_SWAPPING: 进程页面被交换出内存的进程。

TASK_KILLABLE:Linux 中的新进程状态。

EXIT_ZOMBIE:进程的执行被终止,但是其父进程还没有使用wait()等系统调用来获知它的终止信息,此时进程成为僵尸进程。

EXIT_DEAD:进程的最终状态 。

unsigned long flags;
flags是进程当前的状态标志,
具体的如:
0x00000002表示进程正在被创建;
0x00000004表示进程正准备退出;
0x00000040 表示此进程被fork出,但是并没有执行exec;
0x00000400表示此进程由于其他进程发送相关信号而被杀死

进程标志:

PF_ALIGNWARN //打印“对齐”警告信息。 

PF_PTRACED   //被ptrace系统调用监控。 

PF_TRACESYS  //正在跟踪。 

PF_FORKNOEXEC //进程刚创建,但还没执行。 

PF_SUPERPRIV //超级用户特权。 

PF_DUMPCORE //dumped core。 

PF_SIGNALED //进程被信号(signal)杀出。 

PF_STARTING //进程正被创建。 

PF_EXITING //进程开始关闭。 

PF_USEDFPU //该进程使用FPU(SMP only)。 

PF_DTRACE delayed trace (used on m68k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值