记忆力最好用拙劣的毛笔记录一次defunct过程的由来和处理:
僵尸进程是一个已经死亡的进程,但在进程表(processs table )中仍占有位置(slot )。
由于工艺表空间有限,defunct进程不仅会占用系统内存资源,影响系统性能,而且过多的工艺表会导致系统瘫痪。
我知道每个Unix进程在进程表中都有一个入口点(entry ),核心程序执行该进程时使用的所有信息都存储在入口点中。
通过ps命令查看系统中的工艺信息,可以查看工艺表中的相关数据。 fork ) )通过系统调用创建新进程时,核心进程会在“工艺表”中将入口点分配给新进程,并将相关信息存储在与入口点对应的工艺表中。 这些信息之一是父进程的标识符。
此进程结束自己的生命周期后,将执行(exit ) )系统调用,原始进程表中的数据将替换为进程的退出代码(exit code )、用于执行的CPU时间等数据,系统将变为父进程
由此可见,defunct进程出现在子进程结束之后,但父进程尚未读取这些数据。 defunct进程不能直接用kill -9杀死。 否则就不叫僵尸进程了。
如果知道defunct进程发生的原因,就可以很容易地kill defunct进程。
方法有2,1。 重新启动服务器计算机。 虽然这是最简单和最容易使用的方法,但是如果服务器计算机上运行的是其他程序,则这种方法会很昂贵。 所以,尽量使用以下方法。 2 )如果找到此defunct僵尸进程的父进程并杀死此进程的父进程,则此defunct进程将自动消失。