Ubuntu查找和杀死僵尸进程

# zombie #

通常,父进程通过 wait()函数检查其子进程的状态。子进程完成后,等待功能会通知父进程完全从内存中退出该进程。但是,如果父级未能为其任何子级调用wait函数,则子级进程将作为死进程或僵尸进程(失效进程)在系统中保持活动状态。这些僵尸进程可能大量堆积在系统上,并影响其性能。在这种情况下,须杀死这些僵尸进程。

Part 1

查看僵尸进程

可以通过查看系统上运行的各种进程来检查系统性能。Ubuntu可以通过top命令查看这些过程:

top

可以在第二行看到系统上存在16个僵尸进程。

如果想要有关僵尸进程的更多详细信息,请使用以下命令:

ps -A -ostat,ppid,pid,cmd | grep -e '^[zZ]' #或ps axo stat,ppid,pid,comm | grep -w defunct

此命令将提供 状态,parentID,进程ID,正在运行僵尸进程的程序 (在我的系统上名为“ zombie”的虚拟程序)。失效标志表明这是一个僵死的僵尸进程。

Part 2

杀死Zombie-Process

首先,让我们了解僵尸进程如何威胁到我们系统的性能。重要的是要知道僵尸已经死了,并且大多数已完成的进程不占用内存或CPU资源。但是,每个进程都分配有唯一的进程ID,该ID来自处理器保留的有限PID池。如果大量僵尸聚集在一起,它们将消耗掉PID池的大部分,并且由于缺少进程ID,新进程将无法启动。少量已消失的程序占据系统不是很大的威胁,但这意味着它们的父程序由于错误或缺少 wait()函数而无法将其取消。

当父进程(PPID)无法自动调用 wait()函数时,我们需要手动向父进程发出信号,以在其所有子进程(PID)上运行wait函数,以便可以调用具有完整状态的子进程。可以通过运行SIGCHLD命令来做到这一点。如果不起作用,可以手动杀死父进程,以便杀死其所有僵尸子进程,从而为新进程释放进程ID。

通常的方法是使用以下命令来向僵尸的父进程发出信号,以杀死该命令。

kill -s SIGCHLD PID

在某些情况下,此命令可能无法使用,因为并非所有父进程都已正确编程,以便检查子进程。在这种情况下,可以通过以下命令终止父进程:

kill -9 PPID# 实例:ps axo stat,ppid,pid,comm | grep -w defunct | awk '{print "kill -9 " $2}'

通过这种方式杀死了几乎所有僵尸进程,运行top命令后,您将能够看到系统上的进程情况:

参考阅读:

https://ubuntuqa.com/article/7516.html

(0)

相关推荐

  • Linux进程创建之fork浅析

      在Linux 内核中,无时无刻不维护着进程,从进程的创建到进程销毁,每一个环境都有着复杂的细节.本篇介绍Linux 内核如何创建进程,深入理解 fork 函数以及子进程的创建,对理解多进程开发也至 ...

  • 6 个“吓人”的 Linux 命令

    文章转自:twt企业IT社区 是时候稍微关注一下 Linux 那吓人的一面了. crypt 好吧,我们一直都有crypt.顾名思义,crypt不是存放垃圾文件的地宫或墓坑,而是加密文件内容的命令. 如 ...

  • window下强制杀死某个进程用taskkill /pid 进程号

    window下当使用某个端口时,发现这个端口被占用,但是正规的关闭这个进程又关闭不了,可以使用强制杀死. 进入运行的cmd命令下: 比如想查看8088端口被哪个进程占用了,cmd下输入这个命令:net ...

  • ubuntu 查找已安装的设备驱动程序列表

    如何找出我的 ubuntu 中安装的所有设备驱动程序的列表.我需要设备驱动程序列表而不是内核驱动程序. Linux(以及 Ubuntu)没有单独的实体作为"设备驱动程序",Linu ...

  • 僵尸进程以及孤儿进程

    我们知道在unix/linux中,子进程的结束和父进程的运行是一个异步过程, 当一个进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态.孤儿进程 ...

  • 神奇的Java''僵尸''进程问题

    大概1个月多以前 在启动脚本中增加了tail -f 用来启动后追踪日志判断是否启动成功 后发现无法执行shutdown.sh(卡住 利用curl) 然后无奈使用kill -9 但通过ps -el 发现 ...

  • C++ 实现 查找进程, 杀死进程, 启动进程, 进程重启

    头文件: #include <Windows.h> #include <tlhelp32.h> #include <tchar.h> #include <Sh ...

  • ubuntu如何杀死进程

    一.得到所有进程 先用命令查询出所有进程 ps -ef 二.杀死进程 我们使用ps -ef命令之后,就会得到一些列进程信息,有进程pid什么的,如果你要杀死莫个进程的话,直接使用命令   kill   ...

  • Linux Shell脚本实现根据进程名杀死进程

    #!/bin/sh#根据进程名杀死进程if [ $# -lt 1 ]then echo "缺少参数:procedure_name" exit 1fi PROCESS=`ps -ef ...

  • python-app自动化查找微信僵尸好友

    通过微信转账的方式来判断,这里没有做删除操作,可以自己去写,对于已经僵尸好友和转账异常的用户会存储到对应文件中,方便查看自己手动删除或重新添加 转账页面不同的提示如下几种,所以要分类型操作: 不说太多 ...

  • ubuntu 如何使用终端过滤和终止一些 JAVA 进程

    我有ps aux | grep -v 'grep' | grep "java" | awk '{print $2}'可以过滤所有 java 进程的命令,但我遇到的问题是我只想选择名 ...