系统进程的工作原理就是,当我们启动一个程序的时候,开始执行我们的任务,等任务结束了,我们就停止了这个进程,进程就会从进程表中移除。而僵尸进程是Linux系统中比较常见的一种系统漏洞,即程序已经执行完毕,但是依然留在进程表中。
僵尸程序产生的原因:当程序运行时,它会产生要给父进程和很多子进程,所有这些子进程都会消耗内核分配给它们的内存和CPU资源。
这些子进程完成执行后会发送一个 Exit 信号然后死掉。这个 Exit 信号需要被父进程所读取。父进程需要随后调用 wait 命令来读取子进程的退出状态,并将子进程从进程表中移除。
若父进程正确第读取了子进程的 Exit 信号,则子进程会从进程表中删掉。
但若父进程未能读取到子进程的 Exit 信号,则这个子进程虽然完成执行处于死亡的状态,但也不会从进程表中删掉。
少量的僵尸程序不会对系统产生明显的影响,但是由于系统的可用进程是有限的,当僵尸程序达到一定数量的时候,就会导致系统不能产生新的进程。
僵尸(bot)程序缓解:僵尸进程的产生是因为父进程没有 wait() 子进程。所以如果我们自己写程序的话一定要在父进程中通过 wait() 来避免僵尸进程的产生。
当系统中出现了僵尸进程时,我们是无法通过 kill 命令把它清除掉的。但是我们可以杀死它的父进程,让它变成孤儿进程,并进一步被系统中管理孤儿进程的进程收养并清理。