如何在Linux中查找和杀死僵尸进程

在了解Zombie进程之前,让我们记住Linux的进程是什么。

换句话说,进程是程序实例。可以是前台(交互式进程)或后台(非交互式或自动进程)。可以是父流程(运行时其他流程的创建者)或子流程(其他流程创建的流程)。

在Linux中,除了第一个PID为0的init(或systemd)进程外,每个进程都有一个父进程。进程也有自己的子进程。

您还可以在终端中使用pstree命令查看进程树,查看系统进程的“族常规”。本教程演示如何在Linux中查找和杀死僵尸进程。

在Linux中什么是僵尸进程?

子进程死亡后,将通知父进程执行某些清理,如释放内存。但是,如果父进程不知道死亡,子进程将进入僵尸状态。对于父进程,子进程仍然存在,但子进程实际上已经死了。这就是僵尸过程(也称为死亡过程)的创建方式,并保留在系统中。

我们需要担心僵尸进程吗?

老实说,僵尸过程没有那个名字那么危险。

如果系统内存不足,或者僵尸进程占用的内存太多,则可能会出现问题。此外,大多数Linux进程都可以将最大PID设置为32768。如果其他进程没有可用的ID,系统可能会崩溃。

这种情况很少发生,但特别是当编码错误的程序开始产生大量僵尸过程时。在这种情况下,最好找到僵尸过程并将其杀死。

如何找到僵尸进程?

Linux中的进程可以具有以下状态之一:

D=不间断的睡眠

I=闲置

R=运行

S=睡觉

T=被操作控制信号停止

T=跟踪期间被调试器停止

Z=僵尸

但是,在哪里可以看到流程和各自的状态?简单的方法是使用终端和top命令。

"顶部命令视图"top命令显示,进程及其状态如上截图所示,共有250个任务(或进程),1个正在运行,248个进程处于休眠状态,1个进程处于僵尸状态。

如何找到并杀死僵尸进程?僵尸进程可以被杀死吗?

僵尸过程已经死了。你怎么能杀死已经死亡的过程?

在僵尸电影解说中,可以射击或点燃僵尸的头部。但在这里不是个好选择。你可以燃烧系统来杀死僵尸过程,但这不是一个好的解决办法。)。

有人建议向上层进程发送SIGCHLD信号。但是更有可能被忽略。杀死僵尸进程的另一个选择是杀死父进程。这听起来很残忍,但这是杀死僵尸过程的唯一可靠方法。

因此,我们先列出僵尸流程,了解其ID。可以在终端上使用PS命令完成。

psux | awk ‘ { if($ 8= ‘ z ‘)print } ‘

Ps UX命令输出的第8列显示进程状态。请求打印进程状态为z(表示僵尸状态)的所有匹配行。

流程ID确认后,我们将获取父流程ID。

Ps -o ppid=-p child_id

或者,您可以将两个命令组合在一起,直接提供僵尸进程的PID和父进程的PID,如下所示:

Ps-a-ostat、PID、ppid | grep-e ‘ [ZZ] ‘

在这里,您获得了父进程ID,因此请在命令行中输入以前获得的相应ID进程,以结束进程。

Kill -9 parent_process_ID

:可以通过再次运行PS命令或top命令,确认僵尸进程是否被杀,以杀死"杀死父进程"父进程。

现在知道如何清除僵尸过程了。

Linux

过程

进程管理器

僵尸过程

内存

子流程

父进程

LINUX

英国首相与美国总统联合国气候变化会议上瞌睡

2022-9-22 9:03:04

LINUX

如何杀死不活动的SSH会话

2022-9-22 10:31:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索