IT袋

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

Linux如何杀掉僵尸进程

Linux如何杀掉僵尸进程

时间:2024-01-23 21:00:27 来源:IT袋 作者:马勇
导读:Linux如何杀掉僵尸进程,一篇关于Linux如何杀掉僵尸进程方面的知识,接下来一起来看看吧。 本文主要介绍Linux僵尸进程以及清理僵尸进程的方法。 1、什么是僵尸进程? Linux中的僵尸进程(Zomb

Linux如何杀掉僵尸进程

一篇关于Linux如何杀掉僵尸进程方面的知识,接下来一起来看看吧。

本文主要介绍Linux僵尸进程以及清理僵尸进程的方法。

1、什么是僵尸进程?

Linux中的僵尸进程(Zombie processes)有时也被称为失效或死亡进程。

它们是已执行完毕的进程,但其条目并未从进程表中删除。

Linux如何杀掉僵尸进程

1.1 进程状态

Linux 会维护一个进程表,其中包含所有正在运行的进程及其状态。

下面简要介绍一下各种进程状态: 

(1)Running (R):表示这些进程目前正在运行或可运行,用字母R表示。需要说明:进程是R状态,不代表正在运行,代表可被调度。换句话说,进程只有是R状态才可被调度,其他状态要先转为R状态,才能被 OS 调度;

(2)Waiting (S/D):表示这些进程正在等待事件完成或某种资源就绪,用字母S/D表示,等待可以是可中断休眠S(interruptible sleep) 或不中断休眠D(uninterruptible sleep);

(3)Stopped (T):可以通过发送SIGSTOP信号给进程来停止(T)进程。这个被暂停的进程可以通过发送SIGCONT信号让进程继续运行。

(4)Zombie (Z):一个比较特殊的状态。当子进程退出并且父进程没有读取到子进程退出的返回代码时,就会产生僵死(尸)进程。僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。

1.2 僵尸进程是如何产生的?

当一个进程完成其工作时,Linux 内核会通过发送SIGCHLD信号通知其父进程。然后,父进程执行wait()系统调用,读取子进程的状态并读取其退出代码。这会清除进程表中子进程条目,从而结束进程。

但是,如果父进程没有在创建子进程时执行wait()系统调用,就不会进行适当的清理。在这种情况下,父进程无法监控子进程的状态变化,最终会忽略SIGCHLD信号。这将导致已完成进程的僵尸状态留在进程表中,从而使其作为僵尸进程出现在进程列表中。

另一种情况是,父进程无法处理或接收来自子进程的SIGCHLD信号,这种情况也会导致僵尸的产生。

1.3 搜索僵尸进程

使用ps命令来检索僵尸进程列表:

ps ux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
shubh        9  0.0  0.0  16916  2760 tty1     S    Dec19   0:00 /bin/bash --login
shubh      108  0.0  0.0      0     0 tty1     Z    16:25   0:00 [zombie] <defunct> 
shubh      109  0.0  0.0  17384  1928 tty2     R    16:25   0:00 ps ux

相关阅读