进程状态

操作系统为了对进程进行管理,就必须对每个进程在其生命周期内涉及的所有事情进行全面的描述,而所有这些信息在内核中可以用一个结构体来描述———linux中把对进程的描述结构叫做task_struct。传统上,这样的数据结构叫做进程控制块PCB。Linux中PCB是一个庞大的结构体。(具体包含什么可上网自行查询)

在进程的整个生命周期中,系统(也就是内核)总是同过PCB对进程进行控制的,也就是说,系统是根据PCB感知进程的存在的。

PCB是进程存在的唯一标志,当系统创建一个进程时,就为他建立了一个PCB,进程结束时又收回器PCB,进程也随之消亡。

1.进程状态

(1) 就绪态(TASK_RUNNING):正在运行或准备运行,处于这个状态的所有进程组成就绪队列。

(2)睡眠(或等待)态:分为浅度睡眠和深度睡眠。

浅度睡眠态(TASK_INTERRUPTIBLE):进程正在睡眠(被阻塞),等待资源有效时被唤醒,且可以由其他进程通过信号或时钟中断唤醒。

深度睡眠态(TASK_UNTERRUPTIBLE):与前一个状态类似,但其他进程法来的信号和中断并不能打断他的熟睡。

(3)暂停状态(TASK_STOPPED):进程暂停执行,比如,当接收如下信号时进入暂停状态。

SIGSTOP——停止进程执行。

SIGTSTP——从终端发来信号停止进程。

SIGTTIN——来自键盘的中断。

SIGTTOU——后台进程请求输出。

(4)僵死状态(TASK_ZOMBIE):进程执行结束但尚未消亡的一种状态。此时,进程已经结束且释放大部分资源,但尚未释放其PCB。

当一个进程调用了exit之后,该进程并非马上就消失,而是变为僵死进程。它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,但它的PCB还没有被释放。进程PCB的完全释放是在wait调用之后,若父进程还没有调用wait,则该进程处于僵死状态。(在前几篇博客中有一篇转发的关于僵死进程和孤儿进程的文章)


在task_struct结构体中,状态域定义为:

struct task_struct {

    volatile long state;      //-1 unrunnable,   0 runnable,  >0 stopped

   .....

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值