重学计算机(十、进程的状态)

本文详细介绍了Linux进程的状态,包括三态模型的运行态、就绪态和阻塞态,以及五态模型中增加的创建态和停止态。讨论了各种状态的转换,如进程在等待事件时进入阻塞态,接收信号后进入就绪态。还提到了Linux中更具体的进程状态,如可中断和不可中断阻塞,以及被跟踪和僵死状态。最后,通过`ps`命令展示了如何查看进程状态,并解释了状态标识符的含义。
摘要由CSDN通过智能技术生成

2022年,卷的第一篇,也是在1月1号卷的,加油2022。

10.1 进程的状态

10.1.1 进程的状态

我们在前面学习过,进程是一个动态的过程,所谓的动态,当然会有状态的变化了。

那进程有几个状态呢?其实在不同的的进程模型是不一样的。

接下来我们都来学习一波。

10.1.2 三态模型

三态模型是最简单的,就是我们所熟知的:运行态,就绪态,阻塞态

进程为啥会有这三种状态,其实跟进程调度是有关的,一个操作系统其实有很多进程,比如,Windows系统每一个软件其实都是多个进程,我们在用电脑的时候,感觉这些进程都是同行在运行,可以看看这一篇重学计算机(八、进程与创建进程),里面的并行和并发,在并发的时候,其实就是操作系统在切换进程运行,所以进程才会出现各种状态。

  1. 运行态:该进程此刻在运行。
  2. 就绪态:进程能够运行,但是没有得到CPU,CPU分配给另一个进程。调度器可以在下一次任务切换时选择该进程。
  3. 阻塞态:进程正在睡眠无法进行,因为它在等待一个外部事件。调度器无法在下一次调度切换时选择该进程。

画一个图分析一下:(2022年的第一个图)

在这里插入图片描述

① :当进程在运行的时候,碰到需要等待事件的时候,就会切换成阻塞状态。(比如等待键盘的输入)

② :当进程在阻塞态的时候,是不能直接进入运行态的,必须先进入就绪态,表示着进程已经准备好了,可以被调度了。(比如键盘输入了,可以进行就绪态)

③ :准备好的进程都在就绪态,等待CPU的降临。(有点像狼多肉少的感觉,哈哈)。等CPU分配到该进程的时候,就可以切换成运行态。

④ :几家欢乐几家愁,有的进程被CPU分配了时间之后,当然有的进程就被冷落了,冷落了之后再次进入就绪态,等到CPU的降临。

10.1.3 五态模型

上面已经介绍了进程三态。接着我们来继续看五态模型。

五态模型其实就是比三态多了一个创建态,一个停止态

创建态:就是进程创建的时候的状态。我们之前也写了fork函数创建进程。

停止态:进程停止执行。当进程接收到SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU等信号的时候,都会进入这个状态。当接收到SIGCONT信号,会重新回到就绪态。

在这里插入图片描述

⑤ :进程在调用fork的时候就是在创建态,这个状态不是很重要,也不存在多久。

⑥ : 从运行态到停止态需要接收到信号,可以看上面。

⑦ :当然而已有信号把进程从停止态,换回到就绪态。

10.1.4 其他进程状态

其实我们上面描述的还有其他细节没说,这里我们来聊聊这些进程状态的细节。

TASK_RUNNING(运行态):其实在linux中,运行态和就绪态是一起的,统一叫TASK_RUNNING。

TASK_INTERRUPTIBLE(可中断):阻塞状态中,是分为可中断,和不可中断两种状态的。可中断状态会因为接收到信号而提前被唤醒,从而进入就绪态,然后CPU就感觉先分配时间到这个进程中。当然某些条件达成,也是可以唤醒的。

TASK_UNINTERRUPTIBLE(不可中断):处于等待中的进程,可以等待资源满足的时候被唤醒,但不可以由其他进程通过信号或中断唤醒。所以用kill也不能杀死该进程。这个状态存在的意义就是,内核在某些处理流程是不能被打断的。

TASK_TRACED(被跟踪):进程被停止,被另一个进程跟踪。这种情况是gdb的时候,碰到断点的时候,就会进入这个状态。

EXIT_ZOMBIE(僵死):表示进程已经结束了,但是其父进程没有调用wait4或waitpid()来释放进程描述符。这个状态就在等待收尸的过程,所以叫僵死状态。(后面会详细描述僵尸进程)

EXIT_DEAD(死亡):这个进程是收完尸了,正式进入退出状态,这个状态很快,所以很难观察到。

10.1.4 ps查看进程的状态

养兵千日,用兵一时。上一节讲过了ps查看进程的信息,这次讲了好多进程的状态,我们就用ps来好好查看一下进程的状态。

root       1431  0.3  0.6  92844  6628 ?        Ss   19:10   0:00 sshd: root@pts/1
root       1458  0.2  0.5  22588  5300 pts/1    Ss   19:10   0:00 -bash
root       1480  9.7  0.0   4352   644 pts/1    R+   19:10   0:00 ./test_file
root       1481  9.7  0.0   4352    72 pts/1    R+   19:10   0:00 ./test_file
root       1482  0.0  0.3  37364  3288 pts/0    R+   19:10   0:00 ps -aux

我们上一节看过,STAT表示进程的状态,我们来看看每个字母代表什么意思:

参数含义
D不可中断(通常IO进程)
R正在运行,或在可运行队列中的进程(就绪态)
S(大写)处理休眠状态
T停止或被追踪
Z僵死进程
W进入内存交换(从内核2.6开始无效)
X死掉的进程

对于BSD格式和当使用stat关键字时,可能会显示额外的字符:

参数含义
<高优先级
N低优先级
L页面是否锁定在内存中(用于实时和定制IO)
s是一个会话主进程
l多进程
+位于前台进程组

这个状态介绍讲的不错。

[linux进程状态详解(转)]

本来安排了进程的退出和终止和替换,结果内容太多了,就安排在下一节吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值