
英语: Linuxandubuntu,翻译: Linux China / DarkSun
linux.cn/article-9143-1.html
如果您经常使用Linux,则应该遇到术语“僵尸进程”. 那么什么是僵尸进程?他们是怎么来的?它们对系统有害吗?我该如何杀死这些进程?以下将回答这些问题.
什么是僵尸进程?
我们都知道流程是如何工作的. 我们启动一个程序,开始我们的任务,然后当任务结束时,我们停止该过程. 进程停止后,将从进程表中删除该进程.
您可以通过系统监视器查看当前进度.


但是僵尸程序,有时某些程序即使在执行后仍保留在进程表中.
因此,这些已完成生命周期但仍保留在进程表中的进程称为“僵尸进程”.
它们是怎么产生的?
运行程序时,它将产生一个父进程和许多子进程. 所有这些子进程都消耗内核分配给它们的内存和CPU资源.
这些子进程完成执行后,将发送退出信号并死亡. 此退出信号需要由父进程读取. 父进程需要随后调用wait命令以读取子进程的退出状态,并将子进程从进程表中删除.

如果父进程正确读取了子进程的退出信号,则该子进程将从进程表中删除.
但是,如果父进程未能读取子进程的退出信号,则尽管该子进程已完成执行并且处于无效状态,但仍不会从该进程表中删除该子进程.
僵尸进程对系统有害吗?
不. 由于僵尸进程不做任何事情,不使用任何资源,也不影响其他进程,因此僵尸进程的存在不会受到任何损害. 但是,由于进程表中的退出状态和一些其他进程信息也存储在内存中,因此有时会有过多的僵尸进程,有时可能会成为问题.
您可以这样想象:
“您是一家建筑公司的老板. 您每天根据工人的工作量付款. 每天有一名工人来到施工现场并坐在那里,您不必付款,他什么也没做. 每天都来坐下,仅此而已!”

这个工人是僵尸进程的生动例子. 但是,如果您有很多僵尸工人,您的建筑工地将非常拥挤,这使普通工人难以工作.
那么您如何找出僵尸进程?
打开终端并输入以下命令:
ps aux | grepZ
在进程表中列出所有僵尸进程的详细内容.
如何杀死僵尸进程?

在正常情况下,我们可以使用SIGKILL信号杀死该进程,但僵尸进程已死. 你不会杀死死者. 因此僵尸程序,您需要输入的命令应该是
kill-sSIGCHLD pid
在此处用父进程的进程ID替换pid,以便父进程将删除所有已完成的和已死亡的子进程.
您可以将其视为:
“您在路中间发现了一个尸体,因此您联系了死者的家人,然后他们将尸体从道路上带走了. ”
但是,许多程序编写得不太好,并且这些子僵尸无法删除(否则,您将不会首先看到这些僵尸). 因此,确保删除子级僵尸的唯一方法是杀死其父级进程.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-230196-1.html
有些人不打他是认为你好欺负的
感谢美帝让我军练兵