记录一次僵尸进程


直接出现僵尸进程 77个
瞬间傻逼了, 这是多么奇葩!!
赶紧看下 这些进程是啥
ps -elf |grep Z 查看

发现没---都是同一个, 其父进程也是同一个。
在回想一下 僵尸进程怎么产生的----- 进程退出的时候,其资源没有被回收,也就是 其task_struct资源没有被销毁。进程处理Z 状态。
所以此时 发出kill 信号肯定是没用的。
那怎么处理呢??
我们在想一想,防止出现僵尸进程的方法,

1、父进程使用wait()或者waitpid()之类的函数等待子进程退出 /使用信号函数sigaction为SIGCHLD设置wait处理函数

2、设置SIGCHLD信号为SIG_IGN(即,忽略SIGHLD信号),系统将不产生僵尸进程,

3、孤儿进程,是init进程接管孤儿进程

所以解决办法就是: 将这些僵死进程的父进程 给kill掉 让init进程来回收资源

kill -9 3468 后
top 可以看到 僵尸进程位0
同时 此时代码需要处理.将进程多次fork后在处理

留下一个问题: 为什么父进程没有回收子进程???

posted @ 2020-09-21 15:29  codestacklinuxer  阅读(164)  评论(0编辑  收藏  举报