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号进程也可以是操作系统。同时子进程变成后台进程,只能通过指令来杀死。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值