僵尸进程

Linux系统运维脚本:如何检测出Linux的僵尸进程、并清除僵尸进程 僵尸进程(僵死进程)是指那些已经退出但父进程尚未回收的进程,它们占用了进程号等系统资源,但不再执行任何代码。本文讲述了僵尸进程的定义、僵尸进程的危害、通过PS和TOP等命令检测僵尸进程,通过kill,init,reboot父进程等命令,以及重启系统等方式来清除僵尸进程;以及通过使用wait()或waitpid()来回收子进程。 阅读详情

什么是僵尸进程?

首先要说说Linux下进程的几种状态,这在任何一本将Linux内核的书里面都可以看到,不同于教科书,具体设计一个操作系统的时候要考虑到实用性,所以Linux里面进程的状态要更实际一些,创建是不需要状态的:

1、可执行状态(TASK_RUNNING):相当于把教科书里面的就绪态和运行态放在了一块

2、可中断的睡眠状态(TASK_INTERRUPTIBLE):相当于教科书里面的睡眠状态

3、不可中断的睡眠状态(TASK_UNINTERRUPTIBLE):这个很少用

4、暂停状态(TASK_STOPPED):进程的执行被暂停

5、跟踪状态(TASK_TRACED):当另一个进程被另一个进程监控时,相当于为了调试用的

6、僵死状态(EXIT_ZOMBIE):一种特殊的状态,PCB还在,看是进程占有的资源不在了

7、僵死撤销状态(EXIT_DEAD):相当于教科书里面的终止状态

一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程,换句话说,如果一个进程结束后,他的pcb没有被回收,那么他就会变成一个。

Linux为什么要弄一个僵死状态?

由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束.那么会不会因为父进程太忙来不及wait子进程,或者说不知道子进程什么时候结束,而丢失子进程结束时的状态信息呢?不会。因为UNⅨ提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得到。这种机制就是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait/waitpid来取时才释放.但这样就导致了问题,如果进程不调用wait/waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

如果避免僵尸进程

1、父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。

2、如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收。

3、如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD,SIG_IGN) 通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送信号。

4、还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收 还要自己做。

如何处理僵尸进程 1.什么是僵尸进程         如果父进程在子进程之前终止,则所有的子进程的父进程都会改变为init进程,我们称这些进程由init进程领养。这时使用ps命令查看后可以看到子进程的父进程ppid已经变为了1。         而当子进程在父进程之前终止时,内核为每个终止子进程保存了一定量的信息,所以当终止进程的父进程调用wait或waitpid时,可以得到这些信息。这些信息至少包括进 阅读详情

相关推荐

从零部署DeepSeek V4 Flash:NVIDIA DGX Spark实战指南

GPU加速计算已成为现代人工智能基础设施的核心,其原理是通过并行处理架构大幅提升深度学习模型的训练与推理效率。在AI工程实践中,NVIDIA GPU凭借CUDA生态和专用驱动栈,为大规模语言模型部署提供了硬件基础。本文聚焦于企业级AI服务器部署场景,针对NVIDIA DGX Spark多节点系统的硬件初始化、驱动兼容性配置、容器化部署等关键环节,提供从系统层到应用层的完整解决方案。通过vLLM推理框架的实战配置,演示如何将DeepSeek V4 Flash模型高效部署于多GPU环境,涵盖Tensor Par

weixin_32296621的博客 377

《深入理解Linux内核第四版》学习笔记——第三章进程(一)进程描述符

《深入理解Linux内核第四版》学习笔记,系个人总结,侵删。

Oliver_GYQ的博客 918

西门子1200,与V90和步科MD60第三方伺服PN通讯

需要注意的是回零方式的选择,因为V90是绝对值编码器,这里回零模式选择模式7,系统自动根据编码器反馈以及组态的机械参数,计算出轴的位置,并且掉电保持。在线访问中,找到对应的网卡,以及下面扫描到的设备,可以在线修改ip地址和profinet名称,注意一定要和组态中的完全一致。以上硬件组态上完成,主要是gsd文件导入后,添加硬件,建立连接,修改ip和profinet名称,添加报文。1- 博图V18内,设备组态,网络视图中,拖入V90以及MD60伺服,并与PLC创建连接。向厂家索要GSD文件,PN的描述文件。

weixin_37596954的博客 2463

linux中进程僵死状态以及exit,wait系统调用

僵死状态就是子进程在调用exit后的一段时间里出现的状态,几乎不再内存,也不运行代码,只是在进程列表中存在,这样的状态的弊端就是由于进程列表是有上限的这种僵死状态的进程存在太多就会导致列表不够用从而引发问题 父进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返...

weixin_42135997的博客 945

欢乐熊大话蓝牙知识16:蓝牙是怎么找设备的?扫描与广播的“对话内幕”

蓝牙是怎么找设备的?扫描与广播的对话技术介绍

hoony123的博客 1381

【PowerHarmony】电鸿蒙学习记录-准备工作

将获取的“PowerHarmony_PHM_SDK_V1.0.1.0.tar.gz”进行解压。将获取的“code_1.91.1-1720564633_amd64.deb”进行解压。打开后可见所有文件夹,即可进行编辑开发,VSCode也可打开终端进行编译等调试。选择主控类型,我是用的是gd32f470,我选gd32f4xx。Open Folder路径选中SDK解压后根目录即可。选择对应系统类型,我的是小型的,我选mini。选好后即完成工程创建。

Allenzhu的博客 2729

详解僵尸状态(EXIT_ZOMBLE)

1. 产生原因: 进程运行结束,父进程尚未使用wait函数族等来收尸,即等待父进程销毁它。那么他将变成一个僵尸进程。通过ps命令查看其带有defunct的标志。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程

漫漫求学中的孩儿 9154

DisplayPort 1.4数据扰码实战:16bit LFSR并行优化技巧(附Verilog代码)

本文深入探讨了DisplayPort 1.4协议中16bit数据扰码的并行化实现。针对高带宽视频传输需求,文章详细推导了16位LFSR(线性反馈移位寄存器)的单周期16步并行计算公式,并提供了可直接使用的Verilog代码,解决了传统8bit串行处理吞吐量不足的瓶颈,为高速接口设计提供了关键优化技巧。

y4z5a6b7的博客 259

僵尸进程(Zombie)

一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。 在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出

Listron的专栏 891

7.18 GART 与 GPUVM 对比:一颗 GPU 上两套页表的分工

本文横向对比AMD GPU上并存的GART与GPUVM两套页表。GART为内核专用,全局单一,线性单层结构,CPU同步直写;GPUVM为每进程48位地址空间,四级页表,含并发状态机,支持隔离与迁移。二者通过VMID区分,共享GMC硬件与PTE编码,分工互补。

图形/计算GPU的驱动与虚拟化技术分享园地 383

在 SAP S/4HANA Private Cloud 中把标准 CDS View 发布为 OData:可操作的四条路径与完整示例

在 ADT 中创建。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 724

linux内核学习笔记----进程状态

进程描述符中的state字段描述了进程当前所处的状态,它有一组标志组成,每个标志描述一种可能的进程状态,这些状态是互斥的,也就是说在同一时刻,只能设置一个状态   一、运行状态:TASK_RUNNING,进程要么在CPU上运行,要么准备执行 二、可中断的等待状态:TASK_INTERRUPTIBLE,进程被挂起,直到收到某个消息,唤醒该进程 三、不可中断的等待状态:TASK_UNINT

肖氏专栏 1262

1、硬件工程师笔面试真题汇总(2025版本)

答:按照使用习惯,电源指示灯用红色,信号指示灯用绿色这两种颜色的LED 灯技术最成熟,价格最便宜通孔是贯穿整个PCB 的过孔盲孔是从PCB 表层连接到内层的过孔埋孔是埋在PCB 内层的过孔。大多数PCB厂家的加工能力是这样的:大于等于8mil 的过孔可以做机械孔小于等于6mil 的过孔需要做激光孔对小于等于6mil 的微型孔,在钻孔空间不够时,允许一部分过打在PCB 焊盘上。

XU157303764的博客 2万+

僵尸进程详解

僵尸进程简介“僵尸”进程是什么?通常情况下,造成僵尸进程的成因是因为该进程本应该已经执行完毕,但是该进程的父进程却无法完整的将该进程结束掉,而造成该进程一直存在于内存中。那么如何查看一个进程是否为僵尸进程呢?ps:将某个时间点的进程运行状态选取下来ps aux //查看系统所有的进程数据 -A:所有的进程均显示出来 -a:不与terminal有关的所有进程 -u:有效用户相关的进程 -x:通常

Maple的博客 8457

busmaster软件安装包

busmaster软件安装包,用来编辑lin的LDF文件或者CAN的DBC文件等功能

太阳同步轨道设计:三个可用于设计和分析太阳同步地球轨道的 MATLAB 脚本。-matlab开发

前两个 MATLAB 脚本根据 Kozai 的 J2 和 J2+J4 解决方案计算太阳同步地球轨道所需的平均轨道倾角。 第三个 MATLAB 脚本计算太阳同步轨道所需的密切轨道倾角。 轨道在求解过程中通过数值积分传播,软件允许用户指定在模拟过程中使用的地球重力模型的程度和阶次。 可选地,该脚本还可以包括在求解过程中太阳的点质量重力扰动。

僵尸进程以及如何处理僵尸进程

僵尸进程:就是已经结束了的进程,但是没有从进程表中删除。太多了会导致进程表里面条目满了,进而导致系统崩溃,倒是不占用其他系统资源。最后有defunct的标记,就表明是僵尸进程。 今天配置Redis的时候结束停止Redis服务的时候可能是误操作了,发生了上述的情况! 产生的原因: 每个Linux进程在进程表里都有一个进入点(entry),核心程序执行该进程时使用到的一切信息都存储在进入点。当用ps命令察看系统中的进程信息 时,看到的就是进程表中的相关数据。当以fork()系统调用建立一个新的进程后,核心进程

[爪洼ing]的博客 9723

基于java+springboot+vue+mysql的汽车租赁管理系统 源码+数据库+论文(高分毕设项目).zip

项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。项目都经过严格调试,确保可以运行!可以放心下载技术组成语言:java开发环境:idea数据库:MySql5.7以上部署环境:maven数据库工具:navicat

什么是僵尸进程

在Linux和类Unix操作系统中,**僵尸进程(Zombie Process)**是一种特殊状态的进程。僵尸进程实际上已经完成了其执行任务,但其在系统中的进程表项(Process Table Entry)尚未被清理。这意味着该进程的某些信息仍然保留在系统中,直到其父进程读取了它的退出状态。理解和正确处理僵尸进程对于维护系统的稳定性和可靠性至关重要,特别是在开发需要频繁创建和管理子进程的应用程序时。父进程可以通过设置信号处理函数来自动处理子进程的终止,从而避免僵尸进程的产生。命令可以查看系统中的僵尸进程。

zhangxulang 3308

Latex命令速查手册.pdf

Latex命令速查手册.pdfLatex命令速查手册.pdfLatex命令速查手册.pdfLatex命令速查手册.pdfLatex命令速查手册.pdfLatex命令速查手册.pdf

python僵尸进程的产生和僵尸进程自动处理

僵尸进程 僵尸进程讲解 核心: 孤儿进程 : 父进程先于子进程退出,此时子进程成为孤儿进程。 特点: 孤儿进程会被系统进程收养,此时系统进程就会成为孤儿进程新的父进程,孤儿进程退出该进程会自动处理。 僵尸进程 : 子进程先于父进程退出,父进程又没有处理子进程的退出状态,此时子进程就会称为僵尸进程。 特点: 僵尸进程虽然结束,但是会存留部分PCB在内存中,大量的僵尸进程会浪费系统的内存资源。 Subprocess下僵尸进程产生&收尸 subprocess下僵尸进程产生 僵尸进程的产生内部解释了3种

Freshduke的博客 5298

Linux——僵尸进程以及僵尸进程的处理

僵尸进程 (1)进程中的指令已经执行完成,但是进程PCB结构还没有回收。 即子进程先于父进程退出后,子进程的PCB需要其父进程释放,但是父进程并没有释放子进程的PCB,这样的子进程就称为僵尸进程。 (2)父进程未结束,子进程结束,但父进程没有处理子进程的退出状态(当子进程先于父进程结束,父进程没有获取子进程的退出码,子进程的PCB会保留一段时间等待父进程在PCB中获取退出码,,且该进程不可执行,此时子进程变成僵尸进程)。 直到父进程获取到子进程的退出状态,子进程的PCB才会被移除。 我们的程序在退出的时候:

qq_44824574的博客 1万+

【僵尸进程】

在 Linux 系统中,当一个子进程结束运行(通过调用exit或接收到终止信号),它并不会立即从系统中消失。子进程会进入僵尸状态(Zombie State),此时子进程已经停止执行,但它的进程描述符(包含进程的退出状态等信息)仍然保留在系统中,直到其父进程调用wait或waitpid等系统调用获取其退出状态,释放该进程描述符,子进程才会真正被销毁。处于这种状态的进程就被称为僵尸进程。

xx 1302

查看僵尸进程并杀掉僵尸进程

在运维过程中,我们经常会碰到机器由于某几个特殊的僵尸进程造成整台服务器上的进程异常卡死,负载变高。 例如以下: 其中,存在8个僵尸进程,并且进程19712的CPU使用异常。查看具体的僵尸进程有哪些: 发现这些子僵尸进程的父进程即为19712进程。其对应的其实就是namenode进程   解决办法: (1)如果业务不繁忙,允许停机,可以使用重启机器来解决(这种方法不行,业务不能停...

心向,往之 1万+

僵尸进程是如何产生的?怎样避免僵尸进程的产生

僵尸进程的产生: 当一个进程创建了一个子进程时,他们的运行时异步的。即父进程无法预知子进程会在什么时候结束,那么如果父进程很繁忙来不及wait 子进程时,那么当子进程结束时,会不会丢失子进程的结束时的状态信息呢?处于这种考虑unix提供了一种机制可以保证只要父进程想知道子进程结束时的信息,它就可以得到。 这种机制是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存。但

小博的博客 7282

僵尸进程的查找及僵尸进程的kill

首先我们来看看什么是僵尸进程: 之前的学习过程中时这样理解僵尸进程的:子进程先于父进程退出,并将退出原因保留在pcb中,因此退出后不会自动释放所有资源,子进程退出后操作系统会通知父进程子进程退出了,你去获取一下原因,再完全释放子进程资源。若父进程不管子进程的退出状态,则该子进程为了保存退出原因而将进入僵死状态,成为僵尸进程。 而百度百科的解释为:在UNIX 系统中,一个进程结束了,但是他的父进...

DreamIPossible的博客 2024

Linux杀僵尸进程

zombie

agonysome的博客 1万+

Linux如何杀掉僵尸进程

Linux如何杀掉僵尸进程 1. 僵尸进程定义 ​ 僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。 2. 僵尸进程危害 ​ 由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 那么会不会因为父进程太忙来不及wait子进程,或者说不知道 子进程什么时候结束,而丢失子进程结束时的状态信息呢? 不会。因为UNⅨ提供了一

子冉冰清的博客 8429

Linux僵尸进程怎么处理,Linux 僵尸进程如何处理

Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态。例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止。如果子进程已经终止,那么,它的终止代号将告诉父进程这个任务是否已成功地完成。为了遵循这些设计原则,不允许 Linux 内核在进程一终止后就丢弃包含在进程描述符字段中的数据。只有父进程发出了与被终止的进程相关的...

weixin_42528780的博客 9256
上一篇: 经典线程同步 事件Event
下一篇: 关于fork的一道题目
和道一文字JC
博客等级 码龄19年 24粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值