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

目录

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

二.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需要一直维护状态,内存资源也一直被占用,发生内存泄漏!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值