当前位置:   article > 正文

【Linux】进程概念 —— 进程状态_进程d状态

进程d状态

目录

一.操作系统理论中的进程状态

二.Linux系统中的进程状态

0.前台进程与后台进程

1.R - 运行状态(Running)

2.S - 睡眠状态(Sleeping)

3.D - 磁盘睡眠(Disk Sleep)

4.T - 暂停状态(Stopped)

5.t - 调试状态(Tracing Stopped)

6.X - 死亡状态(Dead) 

7.Z - 僵尸状态(Zombie)


一.操作系统理论中的进程状态

1.新建态:字面意思,一个进程刚刚被新建出来,还没有加入到任何队列中

2.运行态:task_struct在运行队列中等待CPU执行

3.阻塞态:等待非CPU资源,例如:等待键盘输入就绪,等待网卡等各种非CPU资源...

4.挂起态:内存不足时,OS会挑选需要等待资源时间过长的进程先换出到磁盘(SWAP分区),此时只是将内容和数据换出到磁盘,task_struct仍然还在内存中,当挂起态需要被运行时,先要进行换入内存操作,再添加到运行队列等待。

5.终止态:字面意思

内存到磁盘换入换出的过程就是I/O的过程,这个过程很浪费时间

挂起所做的事其实本质就是用时间来换取空间

二.Linux系统中的进程状态

Linux内核中对于状态的标识与定义

0.前台进程与后台进程

进程分为前台进程和后台进程,状态符号后带有“+”说明是前台进程

前台进程:运行时会占用Shell进程,使Shell无法运行,可以使用ctrl+c结束进程

后台进程:运行时不会影响Shell进程,ctrl+c没有用,可以使用kill -9 进程pid杀掉

例如:./process为将进程当作前台进程运行

           ./process &为将进程当作后台进程运行

1.R - 运行状态(Running)

进程在运行中或者进程在运行队列里

对应操作系统理念中的运行态

2.S - 睡眠状态(Sleeping)

进程在等待事件完成,在等待某种资源(S状态也可称为可中断睡眠)

对应操作系统中的阻塞态/挂起态

3.D - 磁盘睡眠(Disk Sleep)

深度睡眠,不可被中断,不可被被动唤醒

当服务器压力过大时,OS会通过一定的手段,杀掉一些进程,来起到节省空间的作用!

如果是S状态时,可以被OS杀掉;

如果是D状态时,不能被OS杀掉,OS无法插手,只能等进程自动醒来;

dd命令可以模拟出D状态的进程

4.T - 暂停状态(Stopped)

5.t - 调试状态(Tracing Stopped)

6.X - 死亡状态(Dead) 

一个进程退出且被检测好回收后,就是X状态

该状态不好捕捉,如果有大量结束的进程都在等待OS回收,才可观察到,瞬时性非常强

7.Z - 僵尸状态(Zombie)

此时一个进程已经退出,还不允许被回收释放,处于一个检测状态

维持这个状态,等待OS或者父进程检测后来进行回收。

Z与X状态的结合就是操作系统理论的终止状态

以上例子,子进程先于父进程结束,处于一个待检测状态,但父进程还没有调用系统调用,也就是还没有读取到子进程退出时的返回值,这时子进程就是一个僵尸进程

总结:

只要子进程退出,父进程还没有退出,且父进程还没有读取到子进程的状态代码(子进程返回值),子进程就会进入僵尸状态,成为一个僵尸进程,等待父进程读取退出状态代码。

僵尸进程的危害:

子进程一直处于Z状态,无法被回收

维护退出状态本身要用数据维护,task_struct就需要一直维护

最终结果就是:PCB需要一直维护状态,内存资源也一直被占用,发生内存泄漏!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/535370
推荐阅读
相关标签
  

闽ICP备14008679号