码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Linux】进程概念 —— 进程状态


    目录

    一.操作系统理论中的进程状态

    二.Linux系统中的进程状态

    0.前台进程与后台进程

    1.R - 运行状态(Running)

    2.S - 睡眠状态(Sleeping)

    3.D - 磁盘睡眠(Disk Sleep)

    4.T - 暂停状态(Stopped)

    5.t - 调试状态(Tracing Stopped)

    6.X - 死亡状态(Dead) 

    7.Z - 僵尸状态(Zombie)


    一.操作系统理论中的进程状态

    1.新建态:字面意思,一个进程刚刚被新建出来,还没有加入到任何队列中

    2.运行态:task_struct在运行队列中等待CPU执行

    3.阻塞态:等待非CPU资源,例如:等待键盘输入就绪,等待网卡等各种非CPU资源...

    4.挂起态:内存不足时,OS会挑选需要等待资源时间过长的进程先换出到磁盘(SWAP分区),此时只是将内容和数据换出到磁盘,task_struct仍然还在内存中,当挂起态需要被运行时,先要进行换入内存操作,再添加到运行队列等待。

    5.终止态:字面意思

    内存到磁盘换入换出的过程就是I/O的过程,这个过程很浪费时间

    挂起所做的事其实本质就是用时间来换取空间

    二.Linux系统中的进程状态

    Linux内核中对于状态的标识与定义

    0.前台进程与后台进程

    进程分为前台进程和后台进程,状态符号后带有“+”说明是前台进程

    前台进程:运行时会占用Shell进程,使Shell无法运行,可以使用ctrl+c结束进程

    后台进程:运行时不会影响Shell进程,ctrl+c没有用,可以使用kill -9 进程pid杀掉

    例如:./process为将进程当作前台进程运行

               ./process &为将进程当作后台进程运行

    Linux下的进程状态
    text/plain 4星 超过75%的资源 909.0B
    下载

    1.R - 运行状态(Running)

    进程在运行中或者进程在运行队列里

    对应操作系统理念中的运行态

    2.S - 睡眠状态(Sleeping)

    进程在等待事件完成,在等待某种资源(S状态也可称为可中断睡眠)

    对应操作系统中的阻塞态/挂起态

    3.D - 磁盘睡眠(Disk Sleep)

    深度睡眠,不可被中断,不可被被动唤醒

    当服务器压力过大时,OS会通过一定的手段,杀掉一些进程,来起到节省空间的作用!

    如果是S状态时,可以被OS杀掉;

    如果是D状态时,不能被OS杀掉,OS无法插手,只能等进程自动醒来;

    dd命令可以模拟出D状态的进程

    4.T - 暂停状态(Stopped)

    linux进程运行状态图
    doc 0星 超过10%的资源 34KB
    下载

    5.t - 调试状态(Tracing Stopped)

    6.X - 死亡状态(Dead) 

    一个进程退出且被检测好回收后,就是X状态

    该状态不好捕捉,如果有大量结束的进程都在等待OS回收,才可观察到,瞬时性非常强

    7.Z - 僵尸状态(Zombie)

    此时一个进程已经退出,还不允许被回收释放,处于一个检测状态

    维持这个状态,等待OS或者父进程检测后来进行回收。

    Z与X状态的结合就是操作系统理论的终止状态

    以上例子,子进程先于父进程结束,处于一个待检测状态,但父进程还没有调用系统调用,也就是还没有读取到子进程退出时的返回值,这时子进程就是一个僵尸进程

    总结:

    只要子进程退出,父进程还没有退出,且父进程还没有读取到子进程的状态代码(子进程返回值),子进程就会进入僵尸状态,成为一个僵尸进程,等待父进程读取退出状态代码。

    僵尸进程的危害:

    子进程一直处于Z状态,无法被回收

    维护退出状态本身要用数据维护,task_struct就需要一直维护

    最终结果就是:PCB需要一直维护状态,内存资源也一直被占用,发生内存泄漏!

  • 相关阅读:
    使用 Redis 实现分布式锁,解决分布式锁原子性、死锁、误删、可重入、自动续期等问题(使用SpringBoot环境实现)
    JS-sort
    【无标题】
    SSM - Springboot - MyBatis-Plus 全栈体系(三十一)
    SSM+美食论坛系统 毕业设计-附源码191023
    【iOS开发】iOS App的加固保护原理:使用ipaguard混淆加固
    【HMS core】【FAQ】Account、IAP、Location Kit and HarmonyOS典型问题合集1
    3BHE022291R0101 PCD230A 专注于制造卓越人工智能
    主控制文件(项目的开始)食用顺序_3
    Web3D水厂:数字孪生智慧水务三维WebGL可视化管理系统
  • 原文地址:https://blog.csdn.net/Hello_World_213/article/details/126175591
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号