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

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

3天内不再提示

如何在Linux终止僵尸进程

CHANBAEK 来源:myfreax 作者:myfreax 2022-12-12 17:40 次阅读

在了解Zombie进程之前,让我回忆一下什么是进程。简而言之,进程是程序实例。它可以是前台的交互式进程或后台的非交互式或自动进程。

它可以是父进程,运行时其他进程的创建者。也可以是子进程是由其它进程创建的进程。

Linux除了第一个PID为0的init/systemd初始化进程外,其他每个进程都有一个父进程。

使用pstree命令在终端中的查看进程树时,也可以查看系统进程的族普。在本教程中将说明如何在Linux终止僵尸进程。

僵尸进程

当子进程死亡时,会通知父进程,以便它可以进行一些清理,例如释放内存等。

但是存在另一种例外情况是,当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源。此时子进程将成为一个僵尸进程。

僵尸进程危害

实话说僵尸进程并不像它的名字听起来那么危险。如果您的系统内存有限或者有太多僵尸进程占用内存,则可能会出现问题。

此外,现在的Linux发行版都可以将进程PID的最大值设置为32768。如果系统进程没有可用的ID,您的系统可能会崩溃。

这种情况很少发生,但有可能发生,如果一个编码不当的程序开始产生大量僵尸进程。在这种情况下,最好找到并终止僵尸进程。

查找僵尸进程

Linux中的进程可以是这些状态之一,D不间断睡眠,I空闲,R正在运行,S睡眠,T由进程制信号终止,t在跟踪状态,通常是被调试器停止。Z僵尸进程。

在查找僵尸进程不妨是先要确认Linux系统存在多少的僵尸进程运行top命令,top命令输出的第二行行尾包行僵尸进程的计数1 zombie

现在Linux系统仅仅存在一个僵尸进程,因此,我们可以不用终止它。但是当系统存在大量的僵尸进程的你可能就需要终止他们。

要找到Linux系统存在僵尸进程,最简单方法使用ps命令列出所有进程,然后通过管道传递awk命令根据进程状态过滤僵尸进程。

top
ps ux | awk '{if($8=="Z+") print}'
top - 22:34:07 up 12:11,  1 user,  load average: 1.82, 1.83, 1.64
Tasks: 393 total,   1 running, 391 sleeping,   0 stopped,   1 zombie

终止僵尸进程

僵尸进程已经死了,你如何杀死一个已经死的进程。在僵尸电影中,你可以射击僵尸的头部或放火烧它。

但在这里不是一个很好选项。你可以烧毁你的系统来杀死僵尸进程,但这不是一个很好的解决方案。

有些人建议向父进程发送SIGCHLD信号。但它更有可能被忽视。杀死僵尸进程的另一个选择是杀死其父进程。

这听起来很残酷,但这是杀死僵尸进程的唯一可靠方法。在终止僵尸进程之前。让我们列出僵尸进程PID。这一点可以在终端运行ps命令来实现。

ps ux命令输出的第8列是进程的状态。这里通过awk命令仅打印进程状态为Z+的进程,Z+表示僵尸进程。

确定僵尸进程PID后,让我们获取其父进程PID,运行命令ps -o ppid= -p child_process_idchild_process_id是僵尸进程PID。

你也可以运行两个命令的组合命令ps -A -ostat,pid,ppid | grep -e '[zZ]',命令将直接提供僵尸进程的PID及其父进程的PID。

ps ux | awk '{if($8=="Z+") print}'
ps -o ppid= -p child_process_id_number

ps -A -ostat,pid,ppid | grep -e '[zZ]'
Z+      1828    1754

Z+是子进程的状态,1828是子进程PID,1754是父进程PID。

现在您获得了父进程PID,最后运行命令sudo kill -9 parent_process_ID终止进程。parent_process_ID是父进程PID。

当终止父进程后可以再次运行命令ps ux | awk '{if($8=="Z+") print}',确认是否终止僵尸进程,也可以运行top命令查看僵尸进程的计数。

kill -9 
ps ux | awk '{if($8=="Z+") print}'

结论

至此,你已经了解什么是僵尸进程,为什么要终止僵尸进程,如何查找僵尸进程以及终止僵尸进程。

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

    关注

    87

    文章

    10994

    浏览量

    206769
  • 进程
    +关注

    关注

    0

    文章

    194

    浏览量

    13876
收藏 人收藏

    评论

    相关推荐

    何在Linux命令行中终止进程

    如果进程在前台运行,你可以使用 Ctrl+C 终端快捷方式。但是,如果进程不可见(在后台运行),你可以使用专用命令杀死它。
    发表于 09-20 11:07 1101次阅读

    Linux系统下进程的几种状态介绍

    文章对 Linux 系统下进程的几种状态进行介绍,并对系统出现大量僵尸进程和不可中断进程的场景进行分析,使用常用的几种工具进行问题分析定位。
    发表于 11-24 16:15 9982次阅读
    <b class='flag-5'>Linux</b>系统下<b class='flag-5'>进程</b>的几种状态介绍

    Linux学习杂谈】之进程的诞生和消失

    死机。 来看下几个进程的概念:僵尸进程:(1)子进程先于父进程结束Linux系统设计的时候,当每
    发表于 09-01 20:38

    孤儿进程僵尸进程

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

    Linux下的进程结构

    进程不但包括程序的指令和数据,而且包括程序计数器和处理器的所有寄存器及存储临时数据的进程堆栈,因此正在执行的进程包括处理器当前的一切活动。 因为Linux是一个多
    发表于 05-27 09:24

    什么是僵尸进程和孤儿进程

    在UNIX里,除了进程0(即PID=0的交换进程,Swapper Process)以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新
    发表于 08-02 08:36

    为什么会出现LINUX僵尸进程

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

    Linux守护进程详解

    较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导载入时启动,在系统关闭时终止Linux有很多系统服务,大多数服务都是通过守护
    发表于 10-18 14:24 0次下载
    <b class='flag-5'>Linux</b>守护<b class='flag-5'>进程</b>详解

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

    如果你经常使用 Linux,你应该遇到这个术语“僵尸进程Zombie Processes”。 那么什么是僵尸进程? 它们是怎么产生的? 它们
    的头像 发表于 12-18 15:56 5511次阅读
    <b class='flag-5'>僵尸</b><b class='flag-5'>进程</b>的产生介绍和危害以及解决方法

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

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

    你知道僵尸进程是个什么东西?

    在UNIX系统中,僵尸进程是指完成执行(通过exit系统调用,或运行时发生致命错误或收到终止信号所致)但在操作系统的进程表中仍然有一个表项(进程
    发表于 04-22 17:50 1149次阅读

    Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动。僵尸
    发表于 04-02 14:40 356次阅读

    Linux僵尸进程会被杀死吗?

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

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

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

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

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