僵尸进程

僵尸进程
现象:当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。
它是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)

产生原因:父进程以fork()系统调用建立一个新的子进程,在子进程运行结束后调用的exit并没有真正的销毁,
而是一个不占存储空间的等待父进程回收其资源的僵尸进程。但是如果父进程未调用wait或者waitpid来回收,
那么子进程一直不会被销毁。父进程如果推出则子进程会交给init来处理回收(孤儿进程)

杀死僵尸进程
找到该defunct僵尸进程的父进程
用PS 命令 ps -ef | grep defunct_process_pid。

预防僵尸进程
1. 在父进程的初始化函数中,调用这个函数:signal(SIGCHLD,SIG_IGN);//父进程不关心子进程是否退出
2. 在创建子进程后调用waitpid,回收资源

posted @ 2020-12-08 17:32  _Show  阅读(59)  评论(0)    收藏  举报