linux系统如何清理和避免僵尸进程?

linux 如何清理僵尸进程?一些朋友在维护服务器的时候,发现有5个nova-novncproxy的僵尸进程,面对这些僵尸进程,我们该如何应对呢?其实也不难,下面教大家查杀和避免僵尸进程。
0126327 ? S 0:05 _ /usr/bin/python /usr/bin/nova-novncproxy --config-file=/etc/nova/nova.conf024765 ? Z 0:00 _ [nova-novncproxy] <defunct>034766 ? Z 0:00 _ [nova-novncproxy] <defunct>044767 ? Z 0:00 _ [nova-novncproxy] <defunct>054768 ? Z 0:00 _ [nova-novncproxy] <defunct>064769 ? Z 0:00 _ [nova-novncproxy] <defunct>复制代码26327 ? S 0:05 _ /usr/bin/python /usr/bin/nova-novncproxy --config-file=/etc/nova/nova.conf4765 ? Z 0:00 _ [nova-novncproxy] <defunct>4766 ? Z 0:00 _ [nova-novncproxy] <defunct>4767 ? Z 0:00 _ [nova-novncproxy] <defunct>4768 ? Z 0:00 _ [nova-novncproxy] <defunct>4769 ? Z 0:00 _ [nova-novncproxy] <defunct>定义:
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系统上的僵尸进程,如何统计有多少僵尸进程?
01#ps -ef | grep defunct复制代码#ps -ef | grep defunct或者查找状态为Z的进程,Z就是代表zombie process,僵尸进程的意思。
另外使用top命令查看时有一栏为S,如果状态为Z说明它就是僵尸进程。
01Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie复制代码Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombietop命令中也统计了僵尸进程。或者使用下面的命令:
01ps -ef | grep defunct | grep -v grep | wc -l复制代码ps -ef | grep defunct | grep -v grep | wc -l如何杀死僵尸进程呢?
一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。
01ps -e -o ppid,stat | grep Z | cut -d” ” -f2 | xargs kill -9复制代码ps -e -o ppid,stat | grep Z | cut -d” ” -f2 | xargs kill -9或
01kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`复制代码kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`当然您可以自己编写更好的shell脚本,欢迎与大家分享。
我将nova-novncproxy stop后再start,僵尸进程即消失,问题解决。
另外子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。就是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,而此时,尽管对它的默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。
如何避免僵尸进程呢?
处理SIGCHLD信号并不是必须的。但对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下 可以简单地将 SIGCHLD信号的操作设为SIG_IGN。
signal(SIGCHLD,SIG_IGN);
这样,内核在子进程结束时不会产生僵尸进程。这一点与BSD4不同,BSD4下必须显式等待子进程结束才能释放僵尸进程
或者
用两次fork(),而且使紧跟的子进程直接退出,是的孙子进程成为孤儿进程,从而init进程将负责清除这个孤儿进程。
关于linux系统清理僵尸进程的操作步骤就给大家分享到这里了,如果你在操作linux系统的过程中也发现了僵尸进程,那么可以按照描述的方法进行清理。
相关内容
教你通过命令行完美完全的卸载IE浏览器(IE9、IE
教你通过命令行完美完全的卸载IE浏览器(IE9、IE10、IE11),卸...
把Windows 系统中的IE8浏览器降为IE6的方法
把Windows 系统中的IE8浏览器降为IE6的方法,方法,版本号,版本...
WIN7操作系统下做好IE6,IE7的兼容性测试
WIN7操作系统下做好IE6,IE7的兼容性测试,兼容性测试,版本,安...
命令行快捷方式 一键清除IE7记录
命令行快捷方式 一键清除IE7记录,快捷方式,命令行,清除,项目,...
新手小白怎么一键重装windows7系统?
新手小白怎么一键重装windows7系统?,一键重装,系统,新手,选择,...
linux端口映射命令是什么?如何使用iptables做端
linux端口映射命令是什么?如何使用iptables做端口映射shell?,端...
win10原版系统iso镜像怎么安装?硬盘安装原版win1
win10原版系统iso镜像怎么安装?硬盘安装原版win10方法,原版,系...
iOS12.1.3 Beta 4系统如何降级?
iOS12.1.3 Beta 4系统如何降级?,系统,版本,刷机,升级,方法,用...
华为EMUI系统介绍
华为EMUI系统介绍,系统,华为,语音,点击,音乐,教程,备忘录,华为...
iOS12.1.3 Beta 4系统怎么刷回之前的系统 iOS12
iOS12.1.3 Beta 4系统怎么刷回之前的系统 iOS12.1.3 Beta 4...
如何使用360安全卫士进行系统盘瘦身?
如何使用360安全卫士进行系统盘瘦身?,系统盘瘦身,安全卫士,点...
如何屏蔽iOS系统更新?
如何屏蔽iOS系统更新?,系统,更新,屏蔽,方法,描述文件,获取,重...
windows10系统总是自动更新怎么办?
windows10系统总是自动更新怎么办?,自动更新,系统,方法,配置,...
电脑怎么使用各种运行命令了解?
电脑怎么使用各种运行命令了解?,运行,命令,怎么使用,输入,启动...
win10系统音频服务未运行怎么办?
win10系统音频服务未运行怎么办?,服务,运行,系统,音频,点击,...