Linux进程概念(2)

一、进程状态

Linux的进程状态实际上就是 struct task_struct 结构体中的一个变量

1.1状态汇总

其中,Linux 状态是用数组储存的,如下:

static const char * const task_state_array[] =
{
        "R (running)",        // 0
        "S (sleeping)",       // 1
        "D (disk sleep)",    // 2
        "T (stopped)",        // 4
        "t (tracing stop)",   // 8
        "X (dead)",            // 16
        "Z (zombie)",         // 32
};

R运行状态(running) : 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
S睡眠状态(sleeping): 意味着进程在等待事件完成,进程在等待资源就绪。

D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态,在这个状态的进程通常会等待IO的结束。
T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

1.2 睡眠状态


我们的 printf 是让代码输出到显示器上,而我们的CPU每次从内存中读取数据,我们查看实时进程时,进程每次都在SLEEP的原因是:CPU处理速度太快,导致我们每次查看时CPU都已经完成工作,等待下一次资源就绪!而我们都已经打印数十行却未观察到RUN状态,足以说明CPU运行速度之快。

睡眠状态还有一个是 [D] 状态,处于D状态下的进程处于深度睡眠,不可以被杀,不可中断睡眠

1.3暂停状态

记得之前我们聊了 [kill] 命令,我们现在来看看 [kill] 中的符号,我们先提个别,其他部分以后会讲
这里的19号符号 [SIGSTOP] 可以让我们的进程停下来,18号符号 [SIGCONT] 可以让暂停的进程重新跑起来。

[kill -19 [pid]] 可以暂停程序,我们通过之前的进程信息查询也可以看到进程的 status 处于 T 状态

此时出入代码[kill -18 [pid]] 即可让进程重新启动:

其实我们很早就接触过[暂停状态],当我们在VS下调试程序时,我们的断点就是让进程进入到了暂停状态。

二、僵尸进程[Z]

2.1概念

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

我们未来会用 [waitpid] 命令读取僵尸进程,使用该命令时,僵尸进程就会由 [Z] 状态变为 [X] 状态,最后由操作系统释放。

我们之前说过 Linux 下使用的大部分执行操作,本质上都是运行进程,那我们使用过那么多命令,为什么没有产生过僵尸呢?
原因是直接在命令行中启动的进程,它们的父进程是 bash ,bash 会自动回收新进程的僵尸。

2.2弊端

1.如果父进程不读取子进程,那么子进程就一直处于Z状态
2.Z状态若一直不退出,那么储存它的PCB将一直被维护
3.如果父进程创建了很多子进程且不读取子进程,那么会造成内存资源浪费和内存泄露!

三、孤儿进程

子进程如果先退出,而父进程没有进行任何操作,那么子进程就会变成僵尸进程。
如果父进程先退出,子进程就称之为“孤儿进程”。

为了保证子进程正常被回收,孤儿进程一般都会被1号进程(又称 init 进程,即OS)所领养。

四、进程优先级

4.1基本概念

cpu资源分配的先后顺序,就是指进程的优先权。
优先权高的进程有优先执行权利。
还可以把进程运行到指定的CPU上,把不重要的进程安排到某个CPU,可以大大改善系统。

4.2查看系统进程

在 linux 系统中,用 [ps –l] 命令则会类似输出以下几个内容:

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

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

相关文章

【Web世界探险家】打开Web世界的大门

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ &…

唯众物联网+地理科学交付云南师范大学地理学部教学实验室项目

近日,云南师范大学地理学部教学实验室建设项目顺利交付。该项目的成功落地,标志着物联网技术与地理科学教育的深度融合,为云南师范大学的地理教学提供了全新的教学平台与资源。该项目以物联网技术为核心,结合地理科学的特点&#…

蓝桥杯算法错题记录-基础篇

文章目录 本文还在跟新,最新跟新时间3/11!!! 格式一定要符合要求,(输入,输出格式)1. nextInt () next() nextLine() 的注意事项2 .数的幂 a^2等3.得到最大长度(最大...&a…

卡尔曼滤波器笔记——最详细

笔记来源— 卡尔曼滤波算法原理及代码实现!https://www.bilibili.com/video/BV1WZ4y1F7VN/?spm_id_from333.337.search-card.all.click&vd_source8d55784dc9c7530bc9e3fa220380be56 简单介绍一下 现在我们就是不知道是距离多少,就需要用到这个卡尔…

如何将应用一键部署至多个环境?丨Walrus教程

在 Walrus 平台上,运维团队在资源定义(Resource Definition)中声明提供的资源类型,通过设置匹配规则,将不同的资源部署模板应用到不同类型的环境、项目等。与此同时,研发人员无需关注底层具体实现方式&…

CSS元素显示模式

CSS元素显示模式 定义&#xff1a;元素显示模式是指元素&#xff08;即标签&#xff09;以什么方式进行显示。 HTML元素分为块元素和行内元素 块元素 常见块元素 &#xff08;下列仅举出部分&#xff09; <h1>~<h6>、<p>、<div>、<ul>、<…

【数据分享】2008-2022年全国范围逐月NO2栅格数据(免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年全国范围逐月的PM2.5栅格数据、2013-2022年全国范围逐月SO2栅格数据、2013-2022年全国范围逐月CO栅格数据和2000-2022年全国范围逐月PM10栅格数据&#xff08;可查看之前的文章获悉详…

properties文件和yml文件的区别以及文件优先级

properties文件和yml文件的区别 yml是按照缩进关系&#xff0c;而properties用"."来表示关系springboot默认生成的是properties文件当properties文件和yml文件都存在时&#xff0c;properties文件的优先级更高。 properties文件的样式 yml文件的样式 文件优先级 r…

Shell常用脚本:hadoop集群启动、停止、重启脚本

脚本内容以我搭建的hadoop集群为例&#xff0c;你们自用的时候自行根据你们的情况进行修改即可 hadoop-cluster-manager.sh #!/bin/bash # 1. 调用此脚本前&#xff0c;请使用ssh-keygen -t rsa、ssh-copy-id -f 目标机器这两个命令使得目标机器是免密登录的 # 2. ssh远程执行…

第五篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas在教育数据和研究数据处理领域的应用

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas 在教育和学术研究中的常见应用介绍二、数据清洗和预处理示例代码三、数据分析和统计示例代码四、数据可视化示例代码五、时间序列分析示例代码六、数据导入和导出示例代码七、数…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的障碍物检测系统(深度学习代码+UI界面+训练数据集)

摘要&#xff1a;开发障碍物检测系统对于道路安全性具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个障碍物检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模型间的性能…

JavaParser的快速介绍

开发的工作主要是写代码&#xff0c; 有考虑过使用代码写代码&#xff0c; 使用代码分析和改进代码吗&#xff1f; JavaParser 就可以帮你用来处理Java 代码的这些功能。 Java Parser 的介绍 Java Parser是一个用于解析和分析Java源代码的开源工具。它提供了一个API接口&…

Tomcat Nginx的动静分离

1.单机反向代理&#xff1a; 实验&#xff1a;7-3 做客户机&#xff0c;7-2做代理服务器&#xff0c;7-1 tomcat 服务器 数据传输从7-3到7-2到7-1 配置&#xff1a; 7-1为之前的虚拟机配置 7-2做代理服务器配置&#xff1a; 7-3客户机配置&#xff1a; 测试&#xff1a; 2…

3.自定义工程目录配置CMakeLists

问题背景 熟悉stm32keil开发的都知道&#xff0c;我们在编写不同的外设时&#xff0c;通常都会单独编写一个app文件夹或者是user文件夹之类的来存放不同外设功能的源文件和头文件。 在前面一节2.构建第一个工程并烧录到ESP32开发板-CSDN博客中&#xff0c;我们是使用了一个乐鑫…

elementui el-table表格自动循环滚动【超详细图解】

效果如图 1. 当表格内容超出时&#xff0c;自动滚动&#xff0c;滚动到最后一条之后在从头滚动。 2. 鼠标移入表格中&#xff0c;停止滚动&#xff1b;移出后&#xff0c;继续滚动。 直接贴代码 <template><div><div class"app-container"><e…

AI智能分析网关V4将HTTP消息推送至安防监控视频汇聚EasyCVR平台的操作步骤

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的输电线路设备检测系统(深度学习+UI界面+Python代码+训练数据集)

摘要&#xff1a;本篇博客详细介绍了如何运用深度学习构建一个先进的输电线路设备检测系统&#xff0c;并附上了完整的实现代码。该系统利用了最新的YOLOv8算法作为其核心&#xff0c;同时也对之前版本的YOLOv7、YOLOv6、YOLOv5进行了性能比较&#xff0c;包括但不限于mAP&…

Pytorch搭建AlexNet 预测实现

1.导包 import torch import matplotlib.pyplot as plt import json from model import AlexNet from PIL import Image from torchvision import transforms 2.数据预处理 data_transform transforms.Compose([transforms.Resize((224, 224)), # 将图片重新裁剪transform…

<线性回归算法(Linear regression)>——《机器学习算法初识》

目录 一、线性回归简介 1 线性回归应用场景 2 什么是线性回归 2.1 定义与公式 2.2 线性回归的特征与目标的关系分析 3 小结 二、线性回归的损失和优化 1 损失函数 2 优化算法 2.1 正规方程 2.1.1 什么是正规方程 2.1.2 正规方程求解举例 2.1.3 正规方程的推导 2.…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的田间杂草检测系统(深度学习模型+UI界面+Python代码+训练数据集)

摘要&#xff1a;开发用于田间杂草识别的系统对提高农业运营效率和提升作物产出至关重要。本篇文章详尽阐述了如何应用深度学习技术开发一个用于田间杂草识别的系统&#xff0c;并附上了完备的代码实现。该系统基于先进的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5…