如何在Linux中查找和杀死僵尸进程
在了解Zombie 进程之前,让我回忆一下什么是 Linux 中的进程。
简而言之,进程是程序实例。它可以是前台(交互式进程)或后台(非交互式或自动进程)。它可以是父进程(运行时其他进程的创建者)或子进程(由其它进程创建的进程)。
在Linux中,除了第一个 PID 为 0 的 init(或 systemd)进程外,其他每个进程都有一个父进程。进程也有自己的子进程。
使用pstree
命令在终端中的查看进程树,也可以查看系统进程的“族普”。在本教程中将说明如何在Linux中查找和杀死僵尸进程。
linux-">在Linux中什么是僵尸进程?
当子进程死亡时,会通知父进程,以便它可以进行一些清理,例如释放内存等。但是,如果父进程不知道其死亡,则子进程将进入僵尸状态。对于父进程,子进程仍然存在,但子进程实际上已经死了。这就是僵尸进程(也称为死进程)的创建方式并留在系统中。
我们需要担心僵尸进程吗?
实话说僵尸进程并不像它的名字听起来那么危险。
如果您的系统内存有限或者有太多僵尸进程占用内存,则可能会出现问题。此外,大多数 Linux 进程可以将最大 PID 设置为 32768。如果其他进程没有可用的 ID,您的系统可能会崩溃。
这种情况很少发生,但有可能发生,特别是如果一个编码不当的程序开始产生大量僵尸进程。在这种情况下,最好找到并杀死僵尸进程。
如何找到僵尸进程?
Linux中的进程可以具有以下状态之一:
- D = 不间断睡眠
- I = 空闲
- R = 运行
- S = 睡觉
- T = 由作业控制信号停止
- t = 在跟踪期间被调试器停止
- Z = 僵尸
但是在哪里可以看到进程及其各自的状态?一种简单的方法是使用终端和top命令。
正如您在上面的屏幕截图中看到的,总共有 250 个任务(或进程),1 个正在运行,248 个进程在休眠,1 个处于僵尸状态。
如何找到并杀死僵尸进程?僵尸进程可以被杀死吗?
僵尸进程已经死了。你如何杀死一个已经死的进程?
在僵尸电影中,你可以射击僵尸的头部或放火烧它。但在这里不是一个很好选项。你可以烧毁你的系统来杀死僵尸进程,但这不是一个很好的解决方案;)
有些人建议向父进程发送 SIGCHLD 信号。但它更有可能被忽视。杀死僵尸进程的另一个选择是杀死其父进程。这听起来很残酷,但这是杀死僵尸进程的唯一可靠方法。
因此,首先,让我们列出僵尸进程以便知道它们的 ID。可以通过在终端中使用ps 命令来实现。
ps ux | awk '{if($8=="Z+") print}'
ps ux命令输出中的第8列显示进程的状态。您要求打印进程状态为 Z+(指示僵尸状态)的所有匹配行。
确定其进程 ID 后,让我们获取其父进程 ID。
ps -o ppid= -p <child_id>
或者,您可以按以下方式组合上述两个命令,它直接提供僵尸进程的PID及其父进程的PID。
ps -A -ostat,pid,ppid | grep -e '[zZ]'
在这里您获得了父进程ID,因此最后通过在命令行中输入之前获得的相应 ID 进程来终止该进程。
kill -9 <parent_process_ID>
您可以通过再次运行 ps 命令甚至 top 命令来验证僵尸进程是否被杀死。
现在您知道如何消除僵尸进程了。
以上是 如何在Linux中查找和杀死僵尸进程 的全部内容, 来源链接: utcz.com/z/507745.html