当前位置: 首页 > article >正文

【Linux】僵尸进程、进程状态简介

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【K8s】专题十五(3):Kubernetes 网络之 Calico 插件理论


目录

一、僵尸进程

二、进程状态


一、僵尸进程

在 Linux 系统中,僵尸进程(Zombie Process)是一种特殊的进程状态,是指一个子进程执行完成后,其父进程尚未读取其退出状态、没有对其资源和状态信息进行回收,导致该子进程一直存在的特殊状态。

僵尸进程的产生通常有以下两种原因:

  • 父进程未回收子进程资源
    • 当一个子进程终止时,会向其父进程发送一个 SIGCHLD 信号,向父进程通知其退出状态。如果父进程没有调用 wait() 或 waitpid() 来读取子进程的退出状态并回收资源,子进程就会成为僵尸进程
  • 父进程先于子进程结束
    • 当一个子进程还未终止时,其父进程先于该子进程结束,则该子进程会变为孤儿进程,进而产生僵尸进程
    • 比较特殊的是,孤儿进程可以被系统的 init 进程(进程号为 1)接管,init 进程可以清理这些孤儿进程产生的僵尸进程

僵尸进程虽然不再占用 Linux 系统的 CPU 资源,但仍然会占用内存资源,并在系统进程表中占用位置以保留部分信息(如 PID、退出状态等)。如果系统中存在大量僵尸进程,可能导致进程表耗尽,从而无法创建新的进程,进而影响系统性能和稳定性。


二、进程状态

在 Linux 系统中,进程(Process)和线程(Thread)均由 task_struct{} 结构表示。

task_struct{} 结构实质上表示任务(Task),是 Linux 系统中调度的基本单位,通常为了简明将其统称为进程。

Linux 进程从创建(Fork)到终止(Exit)的状态转换过程如下图。

Linux 进程状态转换(来自《Linux 内核开发》)

从图中可以看到,当一个进程创建并进入活动周期后,可以在以下两种状态之间进行转换:

  • 运行状态 (Running State)
    • 运行状态通常表明进程可能处于以下两种情况
      • 进程正在运行中(已经获取到 CPU 资源)
      • 进程位于运行队列中(已经就绪,随时可以运行)
    • 通过 ps ef 命令查看时,处于该状态的进程具有 “R” 标识
  • 休眠状态 (Sleeping State)
    • 休眠状态通常表明进程正在等待特定资源(如磁盘 I/O),可以细分为 2 种子状态
      • TASK_INTERRUPTIBLE:该状态可以中断。通过 ps ef 命令查看时,处于该状态的进程具有 “S” 标识
      • TASK_UNINTERRUPTIBLE:该状态无法中断。通过 ps ef 命令查看时,处于该状态的进程具有 “D” 标识

当一个进程终止并调用 do_exit() 期间,还有两种与进程终止相关的状态:

  • EXIT_DEAD:此状态表示进程真正退出的时间
  • EXIT_ZOMBIE:此状态就在 EXIT_DEAD 之前发生,这就是通常所说的 zombie 进程


http://www.kler.cn/a/407522.html

相关文章:

  • 从熟练Python到入门学习C++(record 6)
  • 常见面试题----深入源码理解MQ长轮询优化机制
  • 开源宝藏:Smart-Admin 重复提交防护的 AOP 切面实现详解
  • 赛氪媒体支持“2024科普中国青年之星创作交流活动”医学专场落幕
  • 使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
  • C语言基础学习:抽象数据类型(ADT)
  • 升级鸿蒙NEXT后,你的手机相机发生了这些变化……
  • RNN模型文本预处理--基本处理方法
  • 魔改 Typora 主题,造就 CodeVeil!
  • 七天掌握SQL--->第二天:SQL高级查询与数据库设计
  • GoF设计模式——结构型设计模式分析与应用
  • C#对INI配置文件进行读写操作方法
  • C++结构型设计模式的作用和特征
  • Linux系统性能优化技巧
  • 面试题---深入源码理解MQ长轮询优化机制
  • window11编译pycdc.exe
  • Level DB --- SkipList
  • Qt 实现网络数据报文大小端数据的收发
  • ssm169基于Java的学习交流论坛+vue(论文+源码)_kaic
  • #渗透测试#红蓝攻防#HW#SRC漏洞挖掘01之静态页面渗透
  • 6G通信技术对比5G有哪些不同?
  • DAMODEL丹摩|丹摩智算平台:开启Llama3.1探索之旅
  • 网络爬虫——常见问题与调试技巧
  • 多目标粒子群优化(Multi-Objective Particle Swarm Optimization, MOPSO)算法
  • element-plus入门教程:安装
  • Cmakelist.txt之win-odbc-mysql