当前位置: 首页 > article >正文

Linux 进程(三)

Linux进程状态的查看:

        这是Linux内核源代码对于进程状态的定义:

         R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
        S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠,也叫浅度睡眠(interruptible sleep))。

        D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
        T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
        X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

         注意:状态后面有无+ 号说明这个进程是否为前台进程,有+就是前台进程可以通过ctrl+c终止掉,没有就需要通过 指令(kill -9 pid) 来杀死进程。

 R运行状态、 S睡眠状态(浅度睡眠)

        

        写一段简单的代码:

        这是一个死循环,但是我们经过多次的命令来查看该进程的状态发现,其都是s+ 的状态,难道是因为sleep的原因吗?但是经过实验发现即使是把sleep去掉,查看进程也是处于s+状态,原因是,cpu的处理速度极快(相对于外设来说,可能cpu已经处理完进程了,但是还没有打印在屏幕上),加上还有时间片的概念,导致一个进程在cpu上可能运行几毫秒就结束了,所以说即使查看死循环,也是s+的状态。

        那么怎么样才能查看到死循环,只有跑一个什么都不干的死循环!!

        只有这样的死循环才会出现R状态。

        D磁盘休眠状态

        当内存内存吃紧时,操作系统会杀死一些进程,避免操作系统挂掉,那么有些进程正在和设备之间互动,或者等待设备的反馈信息,或者等待设备的资源,如果杀死该进程,就会造成一些损失,那么D状态就是避免操作系统在内存吃紧的情况下“滥杀无辜”给予进程的“免死金牌”。

        但是系统一旦出现D的情况,说明操作系统距离挂掉也就不远了,说明当前磁盘反应的速度十分缓慢,缓慢到还被操作系统察觉到!!

        所以说一般情况下D状态是不会出现的。

         T、t停止状态(stopped)

                以上两个命令就是停止和重新运行进程:

        注意:ctrl + z 也是停止进程,ctrl+ c是中断程序,注意区别! 

        gdb调试模式下会出下 “t”。

        在系统中有时也会出现 T 大部分原因是 操作系统为了保护某些有害的进程对硬件的访问,而停止了进程。

          X死亡状态(dead):

        运行五秒后子进程显示出defunct(失效的;死人)转台!

        僵尸进程

        僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程
        僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
        所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态

        还是上面的代码!

为什么会有僵尸进程呢?

        创建进程是给用户完成工作的,进程结束时需要有数据结果!保存到pcb中,只有父进程读取了之后,拿到数据后,该进程才能销毁。

        如果父进程不读取子进程,那么子进程会一直处于僵尸状态,pcb也是一直会存在的,会占据内存,造成内存泄露!!!

        孤儿进程:

        父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢?
        父进程先退出,子进程就称之为“孤儿进程”
        孤儿进程被1号init进程领养,当然要有init进程回收喽。

        代码:

        1号进程也可以是操作系统。同时子进程变成后台进程,只能通过指令来杀死。


http://www.kler.cn/a/154429.html

相关文章:

  • Ceph PG(归置组)的状态说明
  • 录的视频怎么消除杂音?从录制到后期的杂音消除攻略
  • Spark 之 Cache
  • 7.高可用集群架构Keepalived双主热备原理
  • 物理hack
  • 数据分析-Excel基础操作
  • 每日一练:冒泡排序
  • 7、Jenkins+Nexus3+Docker+K8s实现CICD
  • 最小生成树算法
  • C++的一些基础
  • 光伏测算工具能测量哪些数据?
  • 自己开发组件更新到npm网站上 通过npm install 安装 保姆级别教程
  • Swin Transformer实战图像分类(Windows下,无需用到Conda,亲测有效)
  • 时序预测 | Python实现TCN时间卷积神经网络时间序列预测(多图,多指标)
  • C语言-指针_02
  • 【FMC139】青翼科技基于VITA57.1标准的4路500MSPS/1GSPS/1.25GSPS采样率14位AD采集FMC子卡模块
  • [ 蓝桥杯Web真题 ]-年度明星项目
  • Linux下的文件IO之系统IO
  • 2023.11.28-电商平台建设03 - 大数据调优手段
  • install pnpm : 无法加载文件的解决办法
  • 【智能家居】一、工厂模式实现继电器灯控制
  • 【ShardingSphere专题】SpringBoot整合ShardingSphere(一、数据分片入门及实验)
  • jquery 判断是手机端还是电脑端
  • 独家揭秘:卢松松拍摄视频背后的创作过程
  • 使用系统ProgressBar实现三色进度条
  • 【开源视频联动物联网平台】JAIN-SIP库写一个SIP服务器