zombie产生原因:
引用:
“Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态。例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止。如果子进程已经终止,那么,它的终止代号将告诉父进程这个任务是否已成功地完成。
为了遵循这些设计原则,不允许 Linux 内核在进程一终止后就丢弃包含在进程描述符字段中的数据。只有父进程发出了与被终止的进程相关的 wait() 类系统调用之后,才允许这样做。这就是引入僵死状态的原因:尽管从技术上来说进程已死,但必须保存它的描述符,直到父进程得到通知。
如果一个进程已经终止,但是它的父进程尚未调用 wait() 或 waitpid() 对它进行清理,这时的进程状态称为僵死状态,处于僵死状态的进程称为僵尸进程(zombie process)。任何进程在刚终止时都是僵尸进程,正常情况下,僵尸进程都立刻被父进程清理了。”
简而言之:儿子玩疯了;老爸忘了这个孩子,自己回家了,孩子一直在亲戚家打闹,没人管了。
查看zombie 进程方法:
ps x -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
自定义了输出列:
stat 状态
ppid 父进程ID
pid 进程ID
cmd 命令行内容
grep -e 扩展正则表达式
处理zombie 进程方法
kill -9 pid #经常不行,熊孩子;说教无用
kill -9 ppid #子之错,父之过;看棍;常常是有用的;
父进程消失后,子进程变为孤儿进程;linux就可以接收管教;自动处理
还不行?
重启服务器吧(末日降临)
网友评论