写得不好或执行得不好的程序会让僵尸进程潜伏在Linux计算机中。了解僵尸是如何产生的,以及如何让它们最终安息。
当然,Linux必须跟踪计算机上运行的所有应用程序和守护进程。其中一种方法是维护进程表。这是内核内存中的结构列表。每个进程在此列表中都有一个条目,其中包含有关它的一些信息。
每个进程表结构中都没有太多内容。它们包含进程ID、一些其他数据项和指向该进程的进程控制块(PCB)的指针。
PCB保存了Linux需要为每个进程查找或设置的许多细节。PCB也会随着进程的创建、给定的处理时间以及最终的销毁而更新。
Linux PCB包含超过95个字段。它被定义为一个名为task_struct.h的结构,长度超过700行。PCB包含以下类型的信息:
“进程状态”可以是以下任一状态:
在Zombie状态下,创建子进程时,父进程调用wait()函数族之一。然后等待子进程中的状态更改。子进程是否已被信号停止、继续或终止?它是否通过运行代码的自然完成而终止?
如果状态更改意味着子进程已停止运行,则读取其退出代码。然后,销毁子PCB并删除其在进程表中的条目。理想情况下,这一切都发生在眨眼之间,处于僵尸状态的进程不会存在很长时间。
相关:如何在Linux上运行和控制后台进程
编写不好的父进程在创建子进程时可能不会调用wait()函数。这意味着没有任何东西在监视子进程中的状态变化,SIGCHLD信号将被忽略。或者,另一个应用程序正在影响父进程的执行,这可能是由于编程不当或恶意意图造成的。
但是,如果父进程没有监视子进程中的状态更改,则不会进行适当的系统内务管理。当子进程终止时,不会删除PCB和进程表中的条目。这将导致僵尸状态永远不会从PCB中移除。
僵尸确实需要一些内存,但它们通常不会造成问题。进程表中的条目很小,但是在它被释放之前,进程ID不能被重用。在64位操作系统上,这不太可能导致任何问题,因为PCB比进程表条目大得多。
可以想象,大量的僵尸会影响其他进程的可用内存量。但是,如果你有那么多僵尸,那么你的父应用程序或操作系统有一个严重的问题。
你不能杀死僵尸进程,因为它已经死了。它不会对任何信号做出响应,因为它已经从内存中删除了,没有地方可以发送SIGKILL信号。您可以尝试向父进程发送SIGCHLD信号,但是如果在子进程终止时它不起作用,那么现在也不太可能起作用。
唯一可靠的解决方案是终止父进程。终止时,它的子进程由init进程继承,init进程是在Linux系统中运行的第一个进程(其进程ID为1)。
init进程定期执行必要的僵尸清理,所以要杀死它们,只需杀死创建它们的进程。top命令是查看是否有僵尸的方便方法。
键入以下内容:
top这个系统有八个僵尸进程。我们可以使用ps命令并将其管道化到egrep中来列出这些。同样,zombie进程的状态标志是“Z”,您通常还会看到“defunct”
键入以下内容:
ps aux | egrep "Z|defunct"将列出僵尸进程。
这是一个更整洁的方式来发现僵尸的进程ID比在顶部来回滚动。我们还看到一个名为“badprg”的应用程序产生了这些僵尸。
第一个僵尸的进程ID是7641,但是我们需要找到其父进程的进程ID。我们可以再次使用ps。我们将使用output选项(-o)告诉ps只显示父进程ID,然后用ppid=flag传递它。
我们要查找的进程将通过使用-p(process)选项来指示,然后传入zombie的进程ID。
因此,我们键入以下命令来查找进程7641的进程信息,但它只报告父进程的ID:
ps -o ppid= -p 7641我们被告知父进程ID是7636。我们现在可以再次使用ps来交叉引用。
我们看到它与前面的父进程的名称相匹配。要终止父进程,请将SIGKILL选项与kill命令一起使用,如下所示:
kill -SIGKILL 7636根据父进程的所有者,您可能还需要使用sudo。
…除非他们在一个庞大的部落里。有几个是不需要担心的,一个简单的重启将消灭他们。
但是,如果您注意到某个应用程序或进程总是在生成僵尸,那么您应该对此进行研究。它很可能只是一个草率编写的程序,在这种情况下,可能有一个更新的版本,可以在其子进程之后进行适当的清理。
...是最好的应用程序也可能挂起。与其等待它们崩溃,不如杀死这些没有响应的程序。事实上,有很多方法可以杀死Linux程序,你可能会发现自己被宠坏了! ...
...便的Linux命令备忘单。如果您想运行其中的几个,请查看如何在带屏幕的Linux终端上执行多任务。 ...
网络安全是一个永恒的战场。2017年,安全研究人员每天发现约23000个新的恶意软件样本(即每小时795个)。 ...
... 让我们看看僵尸网络的力量是如何扩张的,以及你听到的下一个巨大的DDoS将如何比上一个更大。 ...
...你的系统,例如,可能是渗透他们的第一步。因此,评估如何保护您的系统是值得的。 ...
...ee、vmstat和top。我们还将直接查看reading/proc/meminfo。 linux如何使用ram RAM是一种有限的资源,所有进程(如应用程序和守护进程)都需要它的一部分。只有这么多了。内核判断内存争用,并将定量分配的内存分配给所有饥饿的进...
...死他的进程之前,我们会锁定密码来冻结帐户。 相关:如何使用ps命令监视Linux进程 锁定帐户 在终止进程之前,我们将锁定帐户,因为当我们终止进程时,它将注销用户。如果我们已经更改了他的密码,他就无法登录了。 加密...