IT袋

当前位置:主页 > 经验教程 > 系统教程 >

Linux如何杀掉僵尸进程

Linux如何杀掉僵尸进程(2)

时间:2024-01-23 21:00:27 来源:IT袋 作者:马勇
导读:Linux如何杀掉僵尸进程,从输出中可以看出, STAT 列中的 Z 即为僵尸进程状态,或者使用 awk 命令根据 Z 进程状态进一步过滤输出: ps ux | awk '{if($8=="Z") print}'shubh 108 0.0 0.0 0 0 tty1

Linux如何杀掉僵尸进程

从输出中可以看出,STAT列中的Z即为僵尸进程状态,或者使用awk命令根据Z进程状态进一步过滤输出:

ps ux | awk '{if($8=="Z") print}'
shubh       108  0.0  0.0      0     0 tty1     Z    16:25   0:00 [zombie] <defunct>

另一种方法是使用top命令:

top
Tasks:   8 total,   1 running,   6 sleeping,   0 stopped,   1 zombie
%Cpu(s):  0.7 us,  1.6 sy,  0.0 ni, 96.5 id,  0.0 wa,  1.2 hi,  0.0 si,  0.0 st
KiB Mem :  8269412 total,  3161228 free,  4878832 used,   229352 buff/cache
KiB Swap: 15483260 total, 14830144 free,   653116 used.  3256848 avail Mem
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    1 root      20   0    8936    192    148 S   0.0  0.0   0:00.17 init
    8 root      20   0    8936     96     56 S   0.0  0.0   0:00.00 init
    9 shubh     20   0   16916   2748   2640 S   0.0  0.0   0:00.43 bash
   76 root      20   0    8936    224    184 S   0.0  0.0   0:00.00 init
   77 shubh     20   0   16784   3432   3332 S   0.0  0.0   0:00.35 bash
  161 shubh     20   0       0      0      0 Z   0.0  0.0   0:00.00 zombie
  162 shubh     20   0   17624   2084   1508 R   0.0  0.0   0:00.00 top

top除了输出其他详细信息外,还可以在输出顶部的摘要中看到僵尸进程的数量。

2、清理僵尸进程

我们无法真正杀死僵尸进程,因为本身它已经结束了。但是,可以使用一些方法来清理僵尸进程。

2.1 使用 SIGCHLD 信号

可以手动向僵尸进程的父进程发送SIGCHLD信号。这样,父进程就会主动触发wait()系统调用,从而从进程表中清除已失效的子进程。

找到僵尸进程的父进程 PID:

ps -A -ostat,pid,ppid | grep -e '[zZ]'
Z      108   103

这里 108 表示僵尸进程 PID,103 表示其父进程 PID,接下来,可以使用kill命令向父进程发送SIGCHLD信号:

kill -s SIGCHLD 103

不过,并不能保证向父进程发送SIGCHLD信号就能杀死僵尸进程。只有在父进程可以处理SIGCHLD信号的情况下,它才会起作用。

2.2 kill 父过程

如果上一节的方法无法清除失效进程,就需要考虑杀死其父进程:

kill -9 103

但是,杀死父进程会影响其所有子进程。因此,应该格外谨慎,在杀死父进程之前必须确定其影响。

如果存在大量僵尸进程,或者僵尸进程的父进程是 init 进程(pid=1),可以考虑重启系统来清除失效进程。

以上IT袋网网介绍的Linux如何杀掉僵尸进程的详细方法介绍,大家作为一个参考建议。

相关阅读