2019独角兽企业重金招聘Python工程师标准>>>

今天登录到服务器上时,系统打印有6 zombie processes存在,于是用kill -9去清理掉这些僵尸进程,命令执行完后没有错误,可是再次查找时,发现僵尸进程仍然存在,不知道怎么清理了,上网找了一下,学习一下。

僵尸进程定义与查找

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

#ps -ef | grep defunct

或者

#ps aux | grep defunct

或者查找状态为Z的进程,Z就是代表zombie process,僵尸进程的意思。
另外使用top命令查看时有一栏为S,如果状态为Z说明它就是僵尸进程。top命令中也统计了僵尸进程。
Tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 zombie

top - 10:05:03 up 11 days,  1:17,  7 users,  load average: 0.00, 0.01, 0.05
Tasks: 178 total,   1 running, 174 sleeping,   3 stopped,   0 zombie

杀死僵尸进程

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

# ps -e -o ppid,stat | grep Z | cut -d‘ ’ -f1 | xargs kill -9

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

避免僵尸进程

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

signal(SIGCHLD,SIG_IGN);

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

转载于:https://my.oschina.net/shelllife/blog/172237

linux shell中清理僵尸进程相关推荐

  1. linux mysql 僵尸进程_linux shell中清理僵尸进程

    今天登录到服务器上时,系统打印有6 zombie processes存在,于是用kill -9去清理掉这些僵尸进程,命令执行完后没有错误,可是再次查找时,发现僵尸进程仍然存在,不知道怎么清理了,上网找 ...

  2. linux僵尸进程理解,聊聊Linux系统中的僵尸进程

    车祸现场 今天下午,笔者正在认真搬砖,日志集群中有一台机器忽然报init进程占用100% CPU.strace之,发现疯狂输出如下系统调用. ~ strace -p 1 rt_sigprocmask( ...

  3. Linux系统中杀死僵尸进程的方法

    在linux系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的"僵尸"进程."僵尸"进程是一个早已 死亡的进程 ...

  4. linux里面有mysql的僵尸进程_linux 如何清理僵尸进程

    定义 In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for ...

  5. Linux运维实战:Linux清理僵尸进程

    一.僵尸进程简介: 官方解释:当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程. 一般在系统中僵尸进程的关键字为defunct或者dead,僵尸进程 ...

  6. java defunct怎么杀掉_僵尸进程的产生和避免,如何kill杀掉linux系统中的僵尸defunct进程...

    在 Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的"僵尸"进程."僵尸"进程是一个早已 死亡的进程 ...

  7. 网络编程(32)—— linux中销毁僵尸进程的四种方法

    一.wait函数 函数原型: pid_t wait(int *status); 描述: wait可以回收任意一个僵尸进程,只要系统中存在僵尸进程,调用一次wait,就会回收一个僵尸进程. 参数说明: ...

  8. linux shell $0怎么输出,linux shell中$0,$?,$!等的特殊用法

    一.Shell脚本中$0.$?.$!.$$.$*.$#.$@等的意义说明 (1)$$ Shell本身的PID(ProcessID,即脚本运行的当前进程ID号) (2)$! Shell最后运行的后台Pr ...

  9. linux shell中./a.sh , sh a.sh , source a.sh, . ./a.sh的区别

    在linux shell中, 执行shell script的方式有多种, 有什么区别呢? 现在用一个简单例子再来说下. a.sh的内容是: #! /bin/bash echo hello world ...

最新文章

  1. iOS开发之--解决 swap file “*.swp”already exists!问题
  2. 在LINUX环境中,哪种文件系统存储更安全?
  3. Codeforces Round #247 (Div. 2)C. k-Tree(动态规划)
  4. 利用ArcGIS Python批量拼接裁剪遥感影像(arcpy batch processing)
  5. 蒙娜丽莎,品牌创新的探索者
  6. 使用spring initialization创建SpringBoot项目
  7. 关于tcp网络通讯的几个场景的小测试
  8. 蓝宝石显卡bios_这操作竟能让显卡性能暴涨?原来不是黑科技,小白都会
  9. linux交叉编译出现的问题,,Ubuntu 14.10下安装GCC交叉编译器遇到问题及解决方法
  10. Highway Networks
  11. VMC to Hyper-V Import Tool 简体中文版.VZPEDIA首发
  12. 数字信号处理前瞻(note1):奈奎斯特与折叠频率
  13. 地图下载器拼接ArcGIS Server瓦片
  14. vue 对象提供的属性功能、通过axio请求数据(2)
  15. 如何将Nios II硬件和软件合成一个文件(NIOS II)(硬件)(软件)(合并)
  16. jQuery的排他思想
  17. sco的意思_HIV检测中的SCO值意义-3页word资料
  18. [美国签证]准备材料及面签过程
  19. 开发工具---Eclipse 教程Ⅰ
  20. 酷睿i7和i5对计算机专业要求,电脑i5和i7区别有多大?聪明人都这样选择处理器的!...

热门文章

  1. 业务直通式管理,你真的了解吗?
  2. __init__()
  3. 洛谷——P1258 小车问题
  4. React系列---Redux高阶运用
  5. Oracle—dmp表的导入导出
  6. 第七届山东省省赛C Proxy(最短路)
  7. 用HAproxy+keepalived+mysql Replication 构建基于企业级负载均衡
  8. APUE读书笔记-18终端输入输出-14总结
  9. Bitsocket——BCH实时API,为BCH带来无限可能
  10. 工作量证明的最长链原则到底说的是什么?