分享

Ubuntu查找和杀死僵尸进程

 hucy_Bioinfo 2021-08-19

# 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:///article/7516.html

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多