打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux下僵尸进程的处理
linux进程状态D和Z的处理 (转)
linux 如何杀死僵尸进程——原理及操作
Linux的精灵(daemon)进程和僵尸(zombie)进程 (zz)
(转) Linux 的僵尸(zombie)进程
如何查看并杀死僵尸进程?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服