1 2 3 4

监控僵尸进程

 

1 僵尸进程定义

一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 在fork()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用 waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程。

2. 2 僵尸进程处理

2.1. 2.1 查看僵尸进程

2.1.1. 2.1.1 使用top

top 

> Tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 zombie

2.1.2. 2.1.2 使用ps

ps -ef | grep defunct | grep -v grep | wc -l


> 0

2.2. 2.2  查看僵尸进程pid

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'  

 命令注解:

  • -A 参数列出所有进程
  • -o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数
  • grep -e'^[Zz]'  因为状态为 z或者Z 的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程

2.3. 2.3  杀死僵尸进程

 示例:

直接kill -9 11712(Zombiepid)是没有作用的,原因是:Zombie表示进程已经退出,想要清理这样的进程,需要清除其父进程或者等很长时间后内核将其清除,命令如下

kill -HUP 11741  

ps:11741是ppid

2.4. 2.4 自动查杀

ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

命令注解:

  • awk '{print $2}' 打印第二个字段 这里指打印ppid

  • xargs kill -9 指将打印出来的ppid依次杀死

 

posted @ 2020-11-25 14:36  一缕清风丶  阅读(33)  评论(0编辑  收藏  举报