Linux——进程状态

作者:小 琛
欢迎转载,请标明出处

进程状态的查看

一个进程,有多种状态,而要查看当前的状态,使用语句
查看全部进程:ps aux
查看特定进程:ps aux | grep [process]
例:在这里插入图片描述

进程状态

  1. R 运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
  2. R 运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
  3. S 睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
  4. D 磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
  5. T 停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
  6. X 死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

僵尸进程(zombie)

产生原因

我们知道,当一个程序产生一个进程,则它就会有自己的PCB,而父子进程的PCB通过双向链表挂接,某一时刻子进程退出,而父进程并没有接收到该讯息,子进程此时就变成了一个僵尸进程。
因为父进程没有接收到子进程退出状态,因此内核中子进程的PCB并没有消失仍然挂接在父进程中

僵尸进程的危害

前面说了,僵尸进程的PCB是仍然存在的,我们使用ps aux命令仍然可以查看,但它实际已经推出了,而它之前的那块内存就因此被泄露了。过多的僵尸进程的危害就在此处

模拟一个僵尸进程

写一个text.c,使用fork()创建一个子进程并分支,而在父进程的分支让其死循环,这样在子进程结束后就无法将状态讯息返回给父进程
在这里插入图片描述
查看结果,产生了一个Z+进程,即僵尸进程
在这里插入图片描述
此时我们若使用武器"kill -9"强杀僵尸进程呢?
在这里插入图片描述
可以看到,僵尸进程刀枪不入,连kill -9都无法杀掉它,不难理解,此时的该进程其实早已经不存在了,杀掉它更就无从谈起

孤儿进程

产生原因;父进程先退出,子进程就称之为“孤儿进程”

孤儿进程产生后,由1号进程Init回收领养,也就是说,当孤儿进程产生后,1号进程会成为其父进程,收集它的状态信息。那么对于僵尸进程有一种处理方法就是:杀掉其父进程,让僵尸进程变成一个孤儿进程,接着就会被1号进程领养

  • 何为1号进程,Linux运行的第一个进程,后续的进程其实都是和它挂接
  • 在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值