消灭僵尸进程!
也称为“defunct”或“dead”进程 - 简单来说,僵尸进程是指已经结束,但仍存在于系统进程表中的进程。理想情况下,一旦进程完成其工作/执行,它应该从进程表中清除。但由于某些原因,其父进程在执行后没有正确清理它。
在一个公正的(Linux)世界中,进程在完成其执行并退出后会通知其父进程。然后父进程将从进程表中删除进程。如果父进程无法从其子进程(已完成的进程)读取进程状态,则它将无法将进程从内存中删除,因此该进程仍将继续存在于进程表中 - 因此被称为Zombie(僵尸进程)!
为了杀死僵尸进程,我们首先需要识别它。以下命令可用于查找僵尸进程:
$ps aux | egrep "Z|defunct"
在输出的STAT列中的Z和/或最后一个(COMMAND)列中的[defunct]将标识僵尸进程。
现实中你无法杀死一个僵尸进程,因为它已经死了!可以做的是显式地通知其父进程,以便它可以重试读取子(已死)进程的状态并最终从进程表中清除它们。这可以通过向父进程发送SIGCHLD信号来完成。以下命令可用于查找父进程ID(PID):
$ ps -o ppid= <Child PID>
一旦您拥有了僵尸进程的父进程ID,您可以使用以下命令向父进程发送SIGCHLD信号:
$ kill -s SIGCHLD <Parent PID>
然而,如果这不能帮助清除僵尸进程,您将不得不杀死或重启其父进程,或者在僵尸进程的数量激增并导致系统故障时,您将别无选择,只能进行系统重启。以下命令可用于杀死其父进程:
$ kill -9 <Parent PID>
请注意,杀死父进程将影响其所有子进程,因此快速双重检查将有助于确保安全。或者,如果存在几个僵尸进程不会占用太多CPU/内存,最好在下一次计划的系统维护期间杀死父进程或重新启动系统。
推荐文章
对这篇文章感觉如何?
太棒了
0
不错
0
爱死了
1
不太好
0
感觉很糟
0
More in:开源学村
SoCal Linux博览会回归20周年
现在已经是支持和推广FOSS社区的第20个年头了,SCaLE 20x - 南加州Linux博览会将于2023年3月9日至12日在帕萨迪纳会议中心举行。 这个为期4天的年度活动汇集了充满活力的开源用户社 […]
2022年,从学习Rust开始
Rust作为一个新语言,已经连续五年(2016,2017,2018,2019,2020)在Stack Overflow开发者调查的“最受喜爱编程语言”。Rust是一个值得学习的编程语言,它对安全的专注,会帮助你许多。学习Rust 从这本小小的Rust Cheat Sheet出发,了解Rust语言的基本操作。
使用 Linux 命令行解决Wordle 问题
你可以使用 Linux 的 grep 命令和 fgrep 命令来解决Wordle 问题(进行筛选排除),grep 命令使用正则表达式进行搜索,fgrep 命令也像 grep 一样搜索文本,但不使用正则表达式,grep 和 fgrep 命令在扫描单词列表时提供了极大的灵活性。
如何杀死 Linux 中的僵尸进程
在使用操作系统工作时,要时刻注意保持对系统中进程的掌控。一旦僵尸进程占满了你的资源,就只能依靠重新启动来挽回一切了。所以快来学习用 kill 指令来杀灭僵尸进程吧!