当前位置:

首页 > 软件教程 > 终止Linux系统中的僵尸进程

终止Linux系统中的僵尸进程

本文主要介绍Linux僵尸进程以及清理僵尸进程的方法。1、什么是僵尸进程?Linux中的僵尸进程(Zombieprocesses)有时也被称为失效或死亡进程。它们是已执行完毕的进程,但其条目并未从进程表中删除。1.1进程状态Linux会维护一个进程表,其中包含所有正在运行的进程及其状态。下面简要介绍一下各种进程状态:(1)Running(R):表示这些进程目前正在运行或可运行,用字母R表示。需要说明:进程是R状态,不代表正在运行,代表可被调度。换句话说,进程只有是R状态才可被调度,其他状态要先转为R状态,

本文目录

    本文主要介绍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 %MEMVSZ RSS TTYSTAT START TIME COMMAND
    shubh90.00.0169162760 tty1 SDec19 0:00 /bin/bash --login
    shubh1080.00.00 0 tty1 Z16:25 0:00 [zombie]  
    shubh1090.00.0173841928 tty2 R16:25 0:00 ps ux

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

    ps ux | awk '{if($8=="Z") print}'
    shubh 1080.00.00 0 tty1 Z16:25 0:00 [zombie] 

    另一种方法是使用 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 USERPRNIVIRTRESSHR S%CPU %MEM TIME+ COMMAND
    1 root20 08936192148 S 0.00.0 0:00.17 init
    8 root20 08936 96 56 S 0.00.0 0:00.00 init
    9 shubh 20 0 16916 2748 2640 S 0.00.0 0:00.43 bash
     76 root20 08936224184 S 0.00.0 0:00.00 init
     77 shubh 20 0 16784 3432 3332 S 0.00.0 0:00.35 bash
    161 shubh 20 0 000 Z 0.00.0 0:00.00 zombie
    162 shubh 20 0 17624 2084 1508 R 0.00.0 0:00.00 top

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

    2、清理僵尸进程

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

    2.1 使用 SIGCHLD 信号

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

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

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

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

    kill -s SIGCHLD 103

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

    2.2 kill 父过程

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

    kill -9 103

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

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

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程 Linux 进程
    相关文章 更多
    linux删除用户与用户组的方法及命令教程
    linux删除用户与用户组的方法及命令教程

    掌握Linux中删除用户和用户组的正确方法,避免残留文件和进程冲突。本文深入解析userdel和groupdel命令的参数用法,提供处理“用户仍在使用”等常见错误的实战方案。

    Linux如何开启端口号?开放端口命令详解
    Linux如何开启端口号?开放端口命令详解

    详细讲解Linux如何开启端口号以及常用的开放端口命令。

    crossover卸载软件下载及重新安装教程
    crossover卸载软件下载及重新安装教程

    遇到CrossOver运行错误或需要更新版本时,如何彻底卸载旧版并干净重装?本教程详解macOS和Linux下的卸载步骤、残留文件清理方法及官方下载渠道,确保软件环境纯净稳定。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。