以前只在论坛上看到有人用kill -9 $pid 也杀不掉进程,今天终于被我遇到了。
过程是这样的:
一大早来公司,突然收到系统报警mail,一台2U的hp的服务器负载60,上系统一看!httpd死进程过多! 用apachectl stop想杀掉进程再重起,杀了几次说pid已经不存在,可是apachectl start的时候 报启动错误,80端口被暂用! ps axu|grep httpd发现还是有进程存在!killall httpd 发现无济于事。
随手写个脚本想杀掉进程
for i in ` ps aux|awk '{ print $2 }`
do
echo "pid is $i"
kill -9 $i
done
运行后发现进程还是有,一个都杀不掉!
找了个杀不掉的pid,发现 kill -9 $pid 还真是对这个进程没有任何办法!
最后只有reboot了,系统重启后恢复正常!
实在弄不出个所以然,google了下,有如下解释:
a、该进程处于"Zombie"状态(使用ps命令返回defunct的进程)。此时进程已经释放所有资源,但还未得到其父进程的确认。"Zombie"进程要等到下次重启时才会消失,但它的存在不会影响系统性能。
b、该进程处于"kernel mode"(核心态)且在等待不可获得的资源。处于核心态的进程忽略所有信号处理,因此对于这些一直处于核心态的进程只能通过重启系统实现。进程在AIX 中会处于两种状态,即用户态和核心态。只有处于用户态的进程才可以用“kill”命令将其终止。
如果上面的解释是正确的,那么我遇到的应该是第二种情况了!至于是什么东西引发的这个问题。。。。,暂时还不明了!

没有评论:
发表评论