Linux进程详解三:进程状态

本文详细介绍了Linux下进程的不同状态,如运行态、阻塞态(包括浅度休眠S和深度睡眠D)、暂停状态(T和t)、终止态(僵尸Z和死亡X),以及孤儿进程的产生过程,强调了这些状态对进程管理和内存资源的影响。
摘要由CSDN通过智能技术生成

进程状态

进程的状态,本质上就是一个整型变量,在task_struct中的一个整型变量。

状态的存在决定了你的后续行为动作。

Linux中可能会存在多个进程都要根据它的状态执行后续的动作,并且进程可能会存在多个相同的状态,所以进程排队。

一个CPU一个进程队列。

当我们的进程在等待软硬件资源的时候,如果资源还没有就绪,我们的进程task_struct只能将自己设置为阻塞状态,并且将自己的pcb链入等待的资源提供的等待队列。

进程状态的变化,对应的(引起的)是pcb会被操作系统OS变迁到不同的队列中进行排队。

运行状态 R

阻塞状态
当一个进程在cpu的运行队列中,先时运行状态,但是这个进程需要的硬件资源还没有准备好,例如从键盘中读取数据,此时还没有读取到,此时操作系统会将这个进程从cpu的运行队列中拿下来,链入到键盘硬件相对应的排队队列中,并将这个进程的状态设置为阻塞状态,当进程从键盘中获取足够的资源的时候,操作系统再将这个进程拿到CPU的运行队列中重新进行排队。

挂起状态
阻塞挂起
当计算机的资源比较吃紧的时候,某个进程不运行,将其先写入磁盘从队列中取下,当资源充足时或者运行这个进程的时候再从磁盘中读取出来写入到内存,进行执行。

操作系统在被逼急了的情况下,是会杀掉进程的。

Linux下的进程状态

Linux内核下的进程状态

static const char *task_state_array[] = {

    "R (running)",      /*  0 */
	
    "S (sleeping)",     /*  1 */
	
    "D (disk sleep)",   /*  2 */

    "T (stopped)",      /*  4 */

    "T (tracing stop)", /*  8 */

    "Z (zombie)",       /* 16 */

    "X (dead)"      /* 32 */
};

前后台进程
前后台进程,前台进程可以直接杀掉,后台进程只能使用kill杀掉,状态带+就是前台进程,不带就是后台进程。

运行态-R

  • Running

阻塞态

浅度休眠-S
  • Sleeping
    阻塞态之一。
    休眠态,可中断睡眠,浅度睡眠
    进程处于浅度睡眠S状态的时候,可以使用Ctrl+C结束
    操作系统也可以杀掉这种状态的进程。
深度睡眠-D
  • Disk Sleep
    阻塞态之一。
    不可中断睡眠,深度睡眠,磁盘休眠
    操作系统不能杀掉这种状态的进程。
暂停状态-T
  • Stopped
    阻塞态之一
    进程处于暂停状态。
    用户可以主动将进程设置为暂停状态。
    当操作系统认为某个进程在做某种危险的行为的时候,操作系统也会将进程设置为暂停状态。
  • kill -19 pid
    让进程处于暂停状态
  • kill -18 pid
    让进程重新开始
暂停状态-t
  • Tracing stop
    阻塞状态之一。
    进程处于被追踪的状态,比如在调试的时候,等待某种资源。

终止态

僵尸-Z
  • Zombie
    一个进程已经执行完毕,但是当前并没有获取这个进程退出的相关数据时,此时这个进程的状态称之为僵尸状态。
    当一个进程执行完成之后,这个进程的代码和数据可以释放掉,但是其对应的PCB不能释放,需要保存供操作系统或者用户获取这个进程的退出信息。

为什么存在Z状态。
创建一个进程是希望这个进程给用户完成工作的,子进程必须得有结果数据,Pcb中的。

什么时Z状态。
进程已经退出了,但是当前的状态需要自己维持住,供上层读取,必须处于Z状态。

如果父进程不读取呢。
如果父进程不读取这个僵尸进程,僵尸状态的进程会一直存在。task_struct对象也要一直存在,需要占用着内存。此时会出现内存泄漏的问题。

所有的进程在退出的时候,都要先经过Z状态。

defunct : 无效的,死亡的。

死亡-X
  • Dead
    真正的死亡状态,进程真正的被销毁了。

孤儿进程

当父进程比子进程提前结束,父进程会被他的父进程bash回收,此时父进程被回收后,子进程就变成了孤儿,此时子进程会被1号进程领养,1号进程就是系统进程。此时子进程不仅变成了孤儿进程也变成了后台进程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

排骨炖粉条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值