当前位置: 首页 > 科技观察

什么是僵尸进程,如何发现并杀死僵尸进程?

时间:2023-03-13 08:12:29 科技观察

如果你经常使用Linux,你应该遇到过“僵尸进程”这个词。那么什么是僵尸进程呢?它们是如何生产的?它们对系统有害吗?我怎样才能杀死这些进程?这些问题将在下文得到解答。什么是僵尸进程?我们都知道流程是如何工作的。我们启动一个程序,开始我们的任务,当任务结束时,我们停止进程。进程停止后,进程将从进程表中删除。可以通过System-Monitor查看当前进程。但是,有时某些程序即使在执行后仍保留在进程表中。那么,这些已经完成了生命周期但仍然留在进程表中的进程就被称为“僵尸进程”。它们是如何生产的?当您运行一个程序时,它会产生一个父进程和许多子进程。所有这些子进程都会消耗内核分配给它们的内存和CPU资源。这些子进程在完成执行并死亡时发送一个Exit信号。这个退出信号需要被父进程读取。然后父进程需要调用wait命令读取子进程的退出状态,将子进程从进程表中移除。如果父进程正确读取到子进程的Exit信号,子进程就会从进程表中删除。但是,如果父进程没有读取到子进程的Exit信号,那么即使子进程已经执行完毕,处于死亡状态,也不会从进程表中删除。僵尸进程对系统有害吗?惯于。由于僵尸进程不做任何事情,不使用任何资源,也不影响其他进程,因此拥有僵尸进程没有坏处。但是,由于进程表中的退出状态和其他进程信息也存储在内存中,因此僵尸进程过多有时会成为一个问题。你可以这样想象:“你是一家建筑公司的老板。你每天根据工人的工作量给他们发工资。有一个工人每天来到建筑工地,坐在那里,而你不不付钱给他,他什么都不做。工作。他只是每天进来,坐在那里,仅此而已!”这个工人是僵尸进程的活生生的例子。但是,如果你有很多僵尸工人,你的建筑工地就会很拥挤,普通工人很难工作。那么如何找出僵尸进程呢?打开终端并输入以下命令:psaux|grepZ会在进程表中列出所有僵尸进程的详细信息。如何杀死僵尸进程?通常我们可以使用SIGKILL信号杀死一个进程,但是僵尸进程已经死了,你不能杀死已经死掉的东西。所以你需要输入的命令应该是kill-sSIGCHLDpid把这里的pid换成父进程的进程id,这样父进程就会删除所有和complete和dead的子进程。你可以把它想象成:“你在马路中间发现了一具尸体,于是你联系了死者的家人,他们把尸体从马路上抬走了。”但是很多程序并没有写得那么好来删除这些儿童僵尸(否则你一开始就不会看到它们)。所以确保子僵尸被删除的唯一方法是杀死它们的父进程。