定义

In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie.

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

如何查看linux系统上的僵尸进程,如何统计有多少僵尸进程?

# ps -ef | grep defunct

或者查找状态为Z的进程,Z就是代表zombie process,僵尸进程的意思。

另外使用top命令查看时有一栏为S,如果状态为Z说明它就是僵尸进程。

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

top命令中也统计了僵尸进程。或者使用下面的命令:

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

一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

# ps -e -o ppid,stat | grep Z | cut -d" " -f2 | xargs kill -9

kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`

另外子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。就是基于这样的原理:就算父进 程没有调用wait,内核也会向它发送SIGCHLD消息,而此时,尽管对它的默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。

如何避免僵尸进程呢?

处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程 将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下 可以简单地将 SIGCHLD信号的操作设为SIG_IGN。

signal(SIGCHLD,SIG_IGN);

这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程

或者

用两次fork(),而且使紧跟的子进程直接退出,是的孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程。

linux里面有mysql的僵尸进程_linux 如何清理僵尸进程相关推荐

  1. linux如何对mysql进行定时备份并定时清理3天之前的备份数据

    linux如何对mysql进行定时备份并定时清理3天之前的备份数据 一.Linux对mysql进行定时备份 1.确保Linux上是否已经安装了mysql以及crontab 安装mysql可参考:htt ...

  2. linux mysql 僵尸进程_Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸. 僵尸 ...

  3. linux里面有mysql的僵尸进程_Linux中的defunct进程(僵尸进程)

    一.什么是defunct进程(僵尸进程)? 在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状 ...

  4. linux java 僵尸进程_Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...

  5. linux怎么查看mysql安装在哪里_Linux下查看MySQL的安装路径

    Linux下查看mysql.apache是否安装,并卸载. 指令ps -ef|grep mysql得出结果 root 17659 1 0 2011 ? 00:00:00 /bin/sh /usr/bi ...

  6. linux解压mysql文件命令行_linux mysql命令

    1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: mys ...

  7. linux mysql查看所有表_linux下查看指定进程的所有连接信息

    定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息.通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到,如果是主动与别的机器建立的连接信息则可以通过 lsof ...

  8. linux重设mysql密码是多少_Linux学习:重设mysql root密码

    ## 20160331 忘记 root密码 1.参考 重设mysql root密码 http://www.111cn.net/database/mysql/43957.htm 2. 停止mysql s ...

  9. linux查看java进程_linux中查看java进程

    linux中查看java进程 查看进程可以使用 ps -ef|grep 'java -jar' ps -ef|grep java [root@vm-linux-x86 ~]# ps -ef|grep ...

最新文章

  1. php arrayaccess 二维,php的ArrayAccess(数组式访问接口)
  2. 让你真正体验一次主板超频的步骤以及成功的快乐
  3. SDN控制器OpenDaylight简介—VeCloud
  4. 一个简单的因数分解java代码
  5. 【二分答案】【哈希表】【字符串哈希】bzoj2946 [Poi2000]公共串
  6. Linux关闭进程命令
  7. 一分钟明白各种SQL语句加的什么锁——《深究Mysql锁》
  8. C++成员函数指针的应用
  9. python字符串的方法和列表的方法_Python 中列表和字符串的方法总结
  10. 初学者应该怎么学习前端?web前端的学习路线大剖析
  11. 1004. 成绩排名 (20)-PAT乙级真题
  12. gitlab设置项目组成员权限
  13. Learn OpenGL 笔记6.2 Gamma Correction(伽马校正)
  14. Android 外网远程连接真机进行开发调试
  15. CMPP错误码(zzzz)
  16. ireport分页后最后多一页空白页
  17. 软件项目管理实践经验谈
  18. 使用哈夫曼编码实现数据的压缩和解压(java版)
  19. 人生苦短,快学python(python可以做什么)
  20. Docker方式部署Github监控系统Hawkeye

热门文章

  1. ESXI5.1 数据备份与恢复
  2. linux软件抗干扰,解决asterisk下使用misdn时被SELinux干扰导致权限不足的问题
  3. Congestion解决办法
  4. Oracle RAC 11R2配置归档、删除策略,闪回配置完整版
  5. php判断是否存在http,php获取http-header来判断文件是否存在
  6. js 节点和checkbox 使用案例
  7. ajax请求会阻塞dom,Jquery ajax 同步阻塞引起的UI线程阻塞问题_jquery
  8. 基于系统的流量控制(Qos)
  9. java程序利用HttpSessionListener实现统计在线人数(示例代码)
  10. ajax嵌套ajax的坏处,promise解决ajax的多重嵌套