【Linux操作系统】Linux中进程的五种状态:R、S、D、T、X以及僵尸进程、孤儿进程

news2024/11/27 10:27:14

 操作系统中有许多同时执行的进程,这些进程都可能处于不同的状态代表着不同的含义。

R运行状态(running)

 概念:并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。

 244c23de0af44df698b88c51048b5136.png

 a0ee5843713648dcb4b9af346150ee52.png 我们运行可执行程序myproc利用指令 ps ajx可以看到进程myproc的状态是R状态。

S睡眠状态(sleeping)

概念:意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠)。

当mycode.c中的代码是如下时,再查看进程myproc的状态就是S睡眠状态了。

ed49319d670a4a98b29c311644c044a8.png

d51c102b1e7f4e6496d1280e70d484e5.png

为什么进程的状态由R变为了S,尽管它是正在运行的。其实我们由睡眠状态的概念可知,进程等待某个事件的完成,这段时间进程就处于睡眠状态,由于myproc进程需要向终端输入字符串数据,因此每次终端打印字符串时,进程myproc都要等待字符串成功输进终端,这里要强调一点是:进程在CPU中运行此时进程才是R态,由于CPU对进程的处理速度所用时间非常快,远快于进程等待字符串成功输进终端的时间。因此进程在运行的大部分时间里都是处于等待字符串成功输进终端,所以我们此时看到的myproc进程的状态是S态。

D磁盘休眠状态(Disk sleep)

概念:有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。

T停止状态(stopped)

概念:可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。

我们先来认识一下如何停止正在运行的进程并且重新让它运行的指令:

ae3b4b50a3454bdfac245a050539cb86.png

停止进程:kill -19 PID

恢复运行进程:kill -18 PID

ed49319d670a4a98b29c311644c044a8.png

执行程序myproc:

f75087df29cb4574b9c04eb17c77a79f.png

X死亡状态(dead)

概念:这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

僵尸进程

僵尸状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵死(尸)进程。僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态。

我们可以通过下面代码来对该状态进行试验:

2577e1e337394e288ae6100252c7e440.png

56f4c4bb347c43cf8e84bab338a6d9d5.png

僵尸进程的危害

进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。可父进程如果一直不读取,那子进程就一直处于Z状态?是的!
维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct(PCB)中,换句话说,Z状态一直不退出,PCB一直都要维护?是的!
那一个父进程创建了很多子进程,就是不回收,是不是就会造成内存资源的浪费?是的!因为数据结构对象本身就要占用内存,想想C中定义一个结构体变量(对象),是要在内存的某个位置进行开辟空间,如果父进程不回收处于Z态的子进程可能会造成内存泄漏?是的!
 

孤儿进程

父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢? 父进程先退出,子进程就称之为“孤儿进程”。孤儿进程被PID为1的操作系统进程领养,当然要由操作系统进程释放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1802971.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git凭证

默认是manager # 将凭证缓存到内存中,默认缓存15分钟 git config --global credential.helper cache# 将凭证存储到磁盘上的纯文本文件中 git config --global credential.helper store# 使用 Git 凭证管理器 git config --global credential.helper manager-core查…

微服务开发与实战Day03

一、导入黑马商城项目 资料文档:Docs 1. 安装MySQL ①删除root目录下的mysql rm -rf mysql/ ②把课前资料里的mysql目录上传到root目录下 ③创建一个通用网络 docker network create hm-net ④使用下面的命令安装MySQL docker run -d \--name mysql \-p 330…

CMakeLists如何多行注释

在使用Visual Studio编写CMakeLists的时候你可能会遇到需要多行注释的情况,可又不知道快捷键是什么。。。 其实你只需要敲个 #[[ 就行了,另外一般方括号VS会自动帮你补全,之后将需要注释的内容放在第二个方括号与第三个方括号之间就完成注释…

今天是放假带娃的一天

端午节放假第一天 早上5点半宝宝就咔咔乱叫了,几乎每天都这个点醒,准时的很,估计他是个勤奋的娃吧,要早起锻炼婴语,哈哈 醒来后做饭、洗锅、洗宝宝的衣服、给他吃D3,喂200ml奶粉、给他洗澡、哄睡&#xff0…

【上篇】从 YOLOv1 到 YOLOv8 的 YOLO 物体检测模型历史

YOLO 型号之所以闻名遐迩,主要有两个原因:其速度和准确性令人印象深刻,而且能够快速、可靠地检测图像中的物体。 在本文中,我将与大家分享我在阅读一篇长达 30 页的综合性论文时获得的见解,该论文深入探讨了 YOLO 模型的进步。 这篇评论全面概述了 YOLO 框架的演变过程,…

Python教程:Python操作MySQL基础使用

8、Python操作MySQL基础使用 8.1 安装pymysql pip install pymysql8.2 测试连接 测试代码 from pymysql import Connection# 获取到MySQL数据库的链接对象 conn Connection(# 主机名hostlocalhost,# 端口号,默认3306port3306,# 账户名userroot,# 密码password3535 )# 打印…

实现Ingress-Nginx Controller高可用方案

文章目录 前提准备1.修改Ingress-Controller 运行模式为hostNetwork并生效2.给部署ingress-controller的节点打标签3.查看ingress-controller的部署情况 方式一:LVSKeepalivedNginxIngress一、部署ipvsadm和keepalived二、配置keepalived1.配置lvs01(keepalived mas…

3.haproxy负载均衡

haproxy负载均衡 一、haproxy介绍1、负载均衡类型 二、haproxy配置文件1、backend2、frontend 三、haproxy实现MySQL负载均衡 —— 4层1、后端两台MySQL配置双主复制2、安装配置haproxy2.1 安装软件2.2 编辑配置2.3 启动haproxy2.4 测试通过haproxy正常连接MySQL 四、haproxy实…

机器学习----奥卡姆剃刀定律

奥卡姆剃刀定律(Occam’s Razor)是一条哲学原则,通常表述为“如无必要,勿增实体”(Entities should not be multiplied beyond necessity)或“在其他条件相同的情况下,最简单的解释往往是最好的…

容器化部署fastdfs文件存储

目录 一、软件信息 二、构建fastdfs镜像 三、docker 启动fdfs服务 四、k8s部署fdfs服务 1、fdfs部署文件 五、外部服务访问 一、软件信息 fastdfs版本:fastdfs:V5.11 libfastcommon版本: V1.0.36 fastdfs-nginx-module版本:V1.20 nginx版本&am…

【python】OpenCV—Blob Detection(11)

学习来自OpenCV基础(10)使用OpenCV进行Blob检测 文章目录 1、cv2.SimpleBlobDetector_create 中文文档2、默认 parameters3、配置 parameters附录——cv2.drawKeypoints 1、cv2.SimpleBlobDetector_create 中文文档 cv2.SimpleBlobDetector_create 是 O…

LeetCode72编辑距离

题目描述 解析 一般这种给出两个字符串的动态规划问题都是维护一个二维数组,尺寸和这两个字符串的长度相等,用二维做完了后可以尝试优化空间。这一题其实挺类似1143这题的,只不过相比1143的一种方式,变成了三种方式,就…

Linux基础2-基本指令4(cp,mv,cat,tac)

上篇文章我们说到了rmdir,rm,man,echo.重定向等知识。 Linux基础1-基本指令3-CSDN博客 本文继续梳理其他基础指令 1.本章重点 1.使用cp命令拷贝文件 2.使用mv命令移动文件 3.使用cat,tac查看小文本文件 2.cp命令 在linux中使用cp命令来拷贝粘贴文件 cp src(原文…

信息学奥赛初赛天天练-23-CSP-J2023基础题-指针、链表、哈夫曼树与哈夫曼编码的实战应用与技巧大揭秘

PDF文档公众号回复关键字:20240608 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 4 假设有一个链表的节点定义如下: struct Node {int data; Node* next; };现在有一个指向链表头部…

【深度学习】CICIDS 2019,入侵检测,SVM支持向量机,随机森林,DNN训练,混淆矩阵

文章目录 数据集介绍Python环境随机森林训练结果SVM支持向量机训练结果DNN训练结果所有代码下载 数据集介绍 下载:https://www.kaggle.com/datasets/tarundhamor/cicids-2019-dataset 数据个数: # 删除label中是WebDDoS的数据df df[df[Label] ! WebDD…

Java Web学习笔记26——Element常用组件

常见组件: 就是一个复制和粘贴的过程。 Table表格:用于展示多条结构类的数据,可对数据进行排序、筛选、对比或其他自定义操作。 常见组件-分页主键: Pagination:分页:当数据量比较多时,使用分…

第七届全国颗粒材料计算力学会议召开,DEMms多尺度离散模拟软件受关注

近日,第七届全国颗粒材料计算力学会议暨第四届计算颗粒技术国际研讨会在南京召开。会议聚焦颗粒材料的力学理论及模型、计算分析与软件开发、工程应用和相关前沿方向中的关键科学问题和难点技术问题,开展广泛的学术交流和讨论。 会议期间,积鼎…

【Python列表解锁】:掌握序列精髓,驾驭动态数据集合

文章目录 🚀一、列表🌈二、常规操作💥增💥删💥改💥查 ⭐三、补充操作 🚀一、列表 列表是一个能够存储多个同一或不同元素的序列 列表:list ---- [] 列表属于序列类型(容器…

WWDC 2024前瞻:苹果如何用AI技术重塑iOS 18和Siri

苹果下周的全球开发者大会有望成为这家 iPhone 制造商历史上的关键时刻。在 WWDC 上,这家库比蒂诺科技巨头将展示如何选择将人工智能技术集成到其设备和软件中,包括通过与 OpenAI 的历史性合作伙伴关系。随着重大事件的临近,有关 iOS 18 及其…

高能来袭|联想拯救者携手《黑神话:悟空》玩转东方神话世界

从2020年首次发布实机演示视频以来,《黑神话:悟空》便在全球范围内获得了广泛关注,成为国产3A游戏的现象级爆款。6月,联想拯救者正式宣布成为《黑神话:悟空》全球官方合作伙伴,致力于共同革新国产游戏体验&…