您的位置:首页 > 其它

进程-进程之进程状态(R、S、D、T、Z、X)

2017-04-20 11:21 218 查看
进程概念:

1)正在执行的程序

2)正在计算机上执行的程序实例

3)能分配处理器并由处理器执行的实体

进程的两个基本元素是程序代码和代码相关联的数据集。进程是一种动态描述,但并不代表所有的进程都在运行。这就可以引入‘进程状态’。

进程在内存中因策会略或调度需求,

会处于各种状态:

Linux下的进程状态:

static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};


R- -可执行状态(运行状态)

只有在运行状态的进程才有可能在CPU上运行,注意是可能,并不意味着进程一定在运行中。同一时刻可能有多个进程处在可执行状态,这些进程的PCB(进程控制块)被放入对应CPU的可执行队列中。然后进程调度器从各个可执行队列中分别选择一个进程在CPU上运行。

另外如果计算机只有一个处理器,那么一次最对只有一个进程处于这种状态。

S- -可中断睡眠状态(sleeping)

处在这个状态意味着进程在等待事件完成。这些进程的PCB(task_struct结构)被放入对应时间的等待队列中。然后等待的事件发生时,对应的进程将被唤醒。

D- -不可中断睡眠(disk sleep)

在这个状态的进程通常会等待IO的结束。

这个状态与sleeping状态相似,处于睡眠状态,但是此刻进程是不可中断的,意思是不响应异步信号。

另外你会发现处在D状态的进程kill -9竟然也杀不死。这就相当于我们怎么也叫不醒一个装睡的人。

T- -暂停状态

给进程发送一个SIGSTOP信号,进程就会响应信号进入T状态,除非该进程正处在D状态。

再通过发送SIGCONT信号让进程继续运行。

kill -SIGSTOP

kill -SIGCONT

Z- -僵死状态

僵死状态是一个比较特殊的状态。进程在退出的过程中,处于TASK_DEAD状态。

在这个退出过程中,进程占有的所有资源将被回收,除了task_struct结构(以及少数资源)以外。于是进程就只剩下task_struct这么个空壳,故称为僵尸。

X- -死亡状态或退出状态(dead)

死亡状态是内核运⾏ kernel/exit.c ⾥的 do_exit() 函数返回的状态。这个状态只是⼀个返回状态,你不会在任务列表⾥看到这个状态

状态切换

进程在运行中不断的改变运行状态;

1)就绪状态

当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。

2)执行(Running)状态

当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态

3) 阻塞(Blocked)状态

正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

就绪–>执行

处在就绪状态的进程,当调度器为其分配了处理机后,就变成了执行状态。

执行–>就绪

执行状态的进程在其执行过程中,时间片跑完了不得不让出处理机,于是从执行变成就绪状态。

执行–>阻塞

正在执行的进程等待某种事件而无法继续执行时,便从执行状态变成阻塞状态。

阻塞–>就绪

处在阻塞状态的进程,如果等待的时间发生,则从阻塞状态转变成就绪状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息