如何找出Linux中长期占用资源的僵尸进程

服务器上不定期的会出现僵尸进程,占用资源很麻烦啊。
然后得杀掉僵尸啊,但是进程列表里又有很多,我该怎么快速筛选呢?
比如找出那些运行超过1个小时的进程之类的

阅读 9.3k
4 个回答

首先,僵尸进程不占用内存和CPU,只占用一个PID和对应的进程结构存储空间。

其次,出现僵尸进程,通常是server程序没写好,建议首先考虑修复这个问题

最后,用ps aux可以看出一个进程是否是僵尸进程(STAT=Z)、它的启动时间(START TIME,或者执行stat /proc/PID获取创建时间)。有了这些数据,你可以很容易地写个简单脚本来滤出那些进程。

1. 应该先检查下程序, 是不是 没有对 子进程 调用 wait或者waitpid函数回收进程资源, 或者把子进程挂在init进程下面, 由系统回收资源。 没有回收 进程资源的进程 就是会zombie状态。

2. 作为一个应急的处理办法, 把状态是Zombie的进程筛选出来, 然后杀了也可以。
kill -9 $( ps aux | awk '{ if( $8 == "Z" ) { print $2 ; } }' )

僵尸进程一般指的是top输出中状态列(S)为Z(zombie)的进程。

运行时间长于1小时的不叫僵尸进程。

问题根本不成立。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题