如果你经常使用 Linux,你应该遇到这个术语“僵尸进程Zombie Processes”。 那么什么是僵尸进程? 它们是怎么产生的? 它们是否对系统有害? 我要怎样杀掉这些进程? 下面将会回答这些问题。

什么是僵尸进程?

我们都知道进程的工作原理。我们启动一个程序,开始我们的任务,然后等任务结束了,我们就停止这个进程。 进程停止后, 该进程就会从进程表中移除。

你可以通过 System-Monitor 查看当前进程。

但是,有时候有些程序即使执行完了也依然留在进程表中。

那么,这些完成了生命周期但却依然留在进程表中的进程,我们称之为 “僵尸进程”。

它们是如何产生的?

当你运行一个程序时,它会产生一个父进程以及很多子进程。 所有这些子进程都会消耗内核分配给它们的内存和 CPU 资源。

这些子进程完成执行后会发送一个 Exit 信号然后死掉。这个 Exit 信号需要被父进程所读取。父进程需要随后调用 wait 命令来读取子进程的退出状态,并将子进程从进程表中移除。

若父进程正确第读取了子进程的 Exit 信号,则子进程会从进程表中删掉。

但若父进程未能读取到子进程的 Exit 信号,则这个子进程虽然完成执行处于死亡的状态,但也不会从进程表中删掉。

僵尸进程对系统有害吗?

不会。由于僵尸进程并不做任何事情, 不会使用任何资源也不会影响其它进程, 因此存在僵尸进程也没什么坏处。 不过由于进程表中的退出状态以及其它一些进程信息也是存储在内存中的,因此存在太多僵尸进程有时也会是一些问题。

你可以想象成这样:

“你是一家建筑公司的老板。你每天根据工人们的工作量来支付工资。 有一个工人每天来到施工现场,就坐在那里, 你不用付钱, 他也不做任何工作。 他只是每天都来然后呆坐在那,仅此而已!”

这个工人就是僵尸进程的一个活生生的例子。但是, 如果你有很多僵尸工人, 你的建设工地就会很拥堵从而让那些正常的工人难以工作。

那么如何找出僵尸进程呢?

打开终端并输入下面命令:

ps aux | grep Z

会列出进程表中所有僵尸进程的详细内容。

如何杀掉僵尸进程?

正常情况下我们可以用 SIGKILL 信号来杀死进程,但是僵尸进程已经死了, 你不能杀死已经死掉的东西。 因此你需要输入的命令应该是

kill -s SIGCHLD pid

将这里的 pid 替换成父进程的进程 id,这样父进程就会删除所有以及完成并死掉的子进程了。

你可以把它想象成:

“你在道路中间发现一具尸体,于是你联系了死者的家属,随后他们就会将尸体带离道路了。”

不过许多程序写的不是那么好,无法删掉这些子僵尸(否则你一开始也见不到这些僵尸了)。 因此确保删除子僵尸的唯一方法就是杀掉它们的父进程。

1.C语言在嵌入式系统编程时的注意事项

2.嵌入式软件学习路线图!

3.Linux文件系统的硬链接与软链接

4.玩嵌入式,可以试试Micro Bit!

5.编程和数学基础不佳如何入门人工智能?

6.Linux 中命令链接操作符,让你的代码更简洁!

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

在Linux中,如何找到并杀掉僵尸进程?相关推荐

  1. Linux如何杀掉僵尸进程

    Linux如何杀掉僵尸进程 1. 僵尸进程定义 ​ 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程.如果父进程先退出 ,子进程被init ...

  2. java 杀死僵死的线程_Ubuntu中找到并杀死僵尸进程

    Ubuntu中产生zombie进程让人很懊恼啊.Windows中在任务管理器里直接找到无响应的进程并结束他就行了,但是ubuntu中需要用命令去解决. System information as of ...

  3. 查看僵尸进程并杀掉僵尸进程

    在运维过程中,我们经常会碰到机器由于某几个特殊的僵尸进程造成整台服务器上的进程异常卡死,负载变高. 例如以下: 其中,存在8个僵尸进程,并且进程19712的CPU使用异常.查看具体的僵尸进程有哪些: ...

  4. linux mysql 进程查看工具_linux查看正在运行的进程(如何在Linux中查看所有正在运行的进程)...

    如何在Linux中查看所有正在运行的进程 名称:ps 使用权限:所有使用者 使用方式:ps [options] [--help] 说明:显示瞬间行程 (process) 的动态 参数:ps的参数非常多 ...

  5. Linux 中显示所有正在运行的进程

    [原创翻译]<在linux中显示所有正在运行的进程> 翻译:飞哥 () 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Show All Running ...

  6. linux 同一进程内通信,linux中,管道能够在同一进程中进行通信吗?

    linux中,管道能够在同一进程中进行通信吗? 答案是否定的. 管道是用于不同进程之间通信,不能再同一进程中进行通信. 同一进程中,直接进行参数传递就行了,不设计通信问题. 不同进程之间才需要通信,通 ...

  7. Linux中如何杀掉僵尸进程

    1) 检查当前僵尸进程信息 # ps -ef | grep defunct | grep -v grep | wc -l 175 # top | head -2 top - 15:05:54 up 9 ...

  8. linux怎么杀掉僵尸进程,Linux中如何杀掉僵尸进程

    1) 检查当前僵尸进程信息 # ps -ef | grep defunct | grep -v grep | wc -l 175 # top | head -2 top - 15:05:54 up 9 ...

  9. 诚之和:在 Linux 和 Windows 中快速找到 Java 应用程序进程 ID

    在这篇文章中,我们将讨论如何快速找到您的 Java 应用程序进程 ID.对于某些监控工具(如​yCrash ​),您需要将应用程序进程 ID 作为输入传递.如果您想查找包含多个不同选项的更详细的帖子来 ...

最新文章

  1. 可视化调试工具gdb-dashboard
  2. VC中BSTR和CString的使用
  3. nodejs源码—初始化
  4. java中全局变量注解_自定义注解,前端获取token值的时候,全局变量返回后端用注解注入,以便以其他业务层使用...
  5. 【杂谈】为了让大家学好深度学习模型设计和优化,有三AI都做了什么
  6. Crontab和sudo中无法使用TensorFlow ImportError libcublas.so.9.0
  7. php csv 简单的导入
  8. 跟技术大咖涨姿势!前沿CV技术+落地应用练就CV界的最强王者
  9. 【poj2114】点分治(离线)
  10. 网站布局中遇到的一些问题
  11. 厉害了!同事请假参加冬奥会顺手得了铜牌:系知名涂料公司员工
  12. linux系统故障排除
  13. AutoCad二次开发
  14. 利用excel搭建动态图表
  15. 用python画六边形
  16. 智慧树知到网课中国马克思主义与当代课后所有章节测试答案
  17. 百度App组件化之路
  18. 游戏开发物语安卓!Android彻底组件化方案实践方法!快来收藏!
  19. 获取微信小程序的APPID及任意一个页面的路径信息
  20. DNS服务器可能不可用 win11解决方法

热门文章

  1. 为什么你熬夜这么晚,即使你知道你不应该熬夜
  2. @Autowired报空指针NullPoint
  3. 计算机等级良好和优秀是什么意思?
  4. 24段魔尺,可以折出哪些精美图案(续)
  5. 【PM必知】项目管理的“六大核心”内容详解
  6. 用纯css模拟下雪的效果
  7. IP地址欺骗 IP Spoof
  8. 在美国学CS能挣多少钱?美国IT公司标准 offer package详细数字及绿卡政策 | 美国留学申请与就业找工作咨询博客|Warald|一亩三分地论坛...
  9. C#的循环控制语句(break,continue)语句
  10. 百度为什么打不开!最新消息~