Linux服务器上top后发现僵尸进程的解决办法

举报
龙腾多多 发表于 2018/12/29 17:54:15 2018/12/29
【摘要】 在Linux服务器日常巡查中,使用top命令后发现了僵尸进程,如 zombie这个参数就代表僵尸进程的含义,什么是僵尸进程呢?(这里盗用一下官方的解释) 一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit, 它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个...

      在Linux服务器日常巡查中,使用top命令后发现了僵尸进程,如

image.png

       zombie这个参数就代表僵尸进程的含义,什么是僵尸进程呢?(这里盗用一下官方的解释)

       一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit, 它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。

       在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集。除此之外,僵尸进程不再占有任何内存空间。它需要它的父进程来为它收尸,如果他的父进程没安装 SIGCHLD 信号处理函数调用wait或waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态,如果这时父进程结束了, 那么init进程自动会接手这个子进程,为它收尸,它还是能被清除的。但是如果如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是为什么系统中有时会有很多的僵尸进程。

       解决过程:

       1、查找僵尸进程的相关信息:ps -e -o stat,ppid,pid,cmd|egrep '^[Zz]'

            ps:ps命令用于获取当前系统的进程信息.

            -e:参数用于列出所有的进程

            -o:参数用于设定输出格式,这里只输出进程的stat(状态信息)、ppid(父进程pid)、pid(当前进程的pid),cmd(即进程的可执行文件。

            egrep:是linux下的正则表达式工具

            '^[Zz]':这是正则表达式,^表示第一个字符的位置,[Zz],表示z或者大写的Z字母,即表示第一个字符为Z或者z开头的进程数据,只所以这样是因                            为僵尸进程的状态信息以Z或者z字母开头。

            查询出来为

image.png

             其中红色Z表示僵尸进程,第一串数字192038 为父进程,第二串数字235458为子进程。

        2、使用 kill -HUP 235458来杀掉这个僵尸进程,运行后,可以再次运行ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'来确认是否将僵尸进程杀死
             如果kill 子进程的无效,可以kill 其父进程来解决问题,例如上面例子父进程pid是 192038 ,那么我们就运行kill -HUP 192038 来解决问题。

image.png

        3、再次top后确认已处理完僵尸进程

image.png

      

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。