0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

僵尸进程的产生介绍和危害以及解决方法

5RJg_mcuworld 2017-12-18 15:56 次阅读

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

什么是僵尸进程?

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

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

僵尸进程介绍和危害以及解决方法

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

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

它们是如何产生的?

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

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

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

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

僵尸进程对系统有害吗?

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

你可以想象成这样:

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

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

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

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

psaux|grepZ

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

如何杀掉僵尸进程?

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

kill-sSIGCHLDpid

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

你可以把它想象成:

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

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


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11227

    浏览量

    208920

原文标题:在Linux中,如何找到并杀掉僵尸进程?

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    孤儿进程僵尸进程

    前段时间,由于研究经典面试题,把孤儿进程僵尸进程也总结了一下。我们有这样一个问题:孤儿进程僵尸进程
    发表于 11-29 14:08

    为什么会出现LINUX僵尸进程

    僵尸进程出现在父进程没有回收子进程的PCB的时候,这个时候子进程已经结束,但是父进程没有回收他,
    发表于 08-07 06:48

    Labview中调用FFmpeg产生僵尸进程的怎么处理?

    时,根据下图的原理,会停掉这个副本的循环,但是此时产生的ffmpeg.exe进程并没有消失,如图3,此时cpu占用为0,内存占用70多m,请问有没有方法来阻止这种进程
    发表于 04-23 21:15

    进程有几种状态?

    ?线程间同步方法有哪些?什么是内核线程和用户线程?内核线程和用户线程的区别?内核线程和用户线程有什么优缺点?什么是僵尸进程,孤儿进程,守护进程
    发表于 12-24 07:16

    短波通信盲区现象解决方法介绍

    短波通信盲区现象解决方法介绍短波通信盲区现象解决方法介绍短波通信盲区现象解决方法介绍
    发表于 11-10 17:13 5次下载

    产生虚焊的原因及解决方法介绍

    本文开始阐述了什么是虚焊以及虚焊的危害,其次介绍了虚焊产生的主要原因及分析虚焊的原因和步骤,最后介绍了解决虚焊的
    发表于 02-27 11:06 8.5w次阅读

    SKYPOS刷卡机的各种故障以及解决方法

    本文档介绍的主要内容详细介绍的是SKYPOS刷卡机的各种故障以及解决方法
    发表于 06-14 08:00 6次下载
    SKYPOS刷卡机的各种故障<b class='flag-5'>以及</b><b class='flag-5'>解决方法</b>

    什么是僵尸进程_Linux僵尸进程可以被“杀死”吗?

    首先要明确一点,僵尸进程的含义是:子进程已经死了,但是父进程还没有wait它的一个中间状态,这个时候子进程是一个
    的头像 发表于 07-28 10:09 4652次阅读
    什么是<b class='flag-5'>僵尸</b><b class='flag-5'>进程</b>_Linux<b class='flag-5'>僵尸</b><b class='flag-5'>进程</b>可以被“杀死”吗?

    静电放电ESD的介绍和原理及解决方法概述

    本文档的主要内容详细介绍的是静电放电ESD的介绍和原理及解决方法概述主要内容包括了:一、何谓ESD „ 二、静电的产生机理 „ 三、静电的危害
    发表于 01-07 08:00 93次下载
    静电放电ESD的<b class='flag-5'>介绍</b>和原理及<b class='flag-5'>解决方法</b>概述

    Linux 系统中僵尸进程

    进程为其收尸。僵尸进程如何产生的?如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会
    发表于 04-02 14:40 435次阅读

    电弧产生的原因及危害

    本文首先介绍了电弧的组成,其次介绍了电弧的产生,最后介绍了电弧的危害及消除方法
    发表于 05-23 15:42 2.3w次阅读

    Linux僵尸进程会被杀死吗?

    那么,根据POSIX标准关于信号(signal)的定义,当我们执行kill -9 4730(4730是4730和4731的TGID,也是整个进程用户态视角的PID)的时候,是要杀死整个4730进程的,所以这个时候4731被我们杀死,整个
    发表于 08-07 16:48 357次阅读
    Linux<b class='flag-5'>僵尸</b><b class='flag-5'>进程</b>会被杀死吗?

    电网谐波产生的原因,危害以及抑制方法

      电网谐波主要是由发电设备(电气终端)、输配电设备和电力系统的非线性负载引起的。今天主要了解电网谐波产生的原因,危害以及抑制方法
    的头像 发表于 01-10 13:13 1.3w次阅读
    电网谐波<b class='flag-5'>产生</b>的原因,<b class='flag-5'>危害</b><b class='flag-5'>以及</b>抑制<b class='flag-5'>方法</b>

    linux下开发避免僵尸进程方法

    进程ID,退出状态,占用的资源等等),你可能会问,为什么这么麻烦,直接释放完资源不就行了吗?这是因为有时它的父进程想了解它的退出状态。在子进程退出但还未被其父进程“收尸”之前,该子
    的头像 发表于 11-11 16:38 703次阅读
    linux下开发避免<b class='flag-5'>僵尸</b><b class='flag-5'>进程</b>的<b class='flag-5'>方法</b>

    如何查看系统是否有僵尸进程

    进程中的指令已经执行完成,但是进程PCB结构还没有回收。   即子进程先于父进程退出后,子进程的PCB需要其父
    的头像 发表于 11-29 15:52 6918次阅读
    如何查看系统是否有<b class='flag-5'>僵尸</b><b class='flag-5'>进程</b>