【Linux】对进程概念的理解

news2025/4/27 10:36:42

一丶进程概念

进程定义 

进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行的程序的实例,包括程序计数器、寄存器和程序变量的当前值。

进程特征

1.进程依赖于程序运行而存在,进程是动态的,程序是静态的。当一个程序被加载到内存当中并执行起来,整个执行的过程就叫做进程,所以进程是动态的,而程序是静态的。

2.进程是操作系统进行资源分配和调度的一个独立单位(CPU除外,线程是处理器任务调度和执行的基本单位)

3.每个进程拥有独立的地址空间,地址空间包括代码区、数据区和堆栈区,进程之间的地址空间是隔离的,互不影响。对于进程的虚拟地址空间,我会在后面详细介绍。

进程的意义

进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。


二丶进程与程序的区别

  1. 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。我们自己所编写的代码和数据在没有运行起来的时候就叫做程序,仅仅只是一个代码和数据的集合,而当我们真正运行程序的时候,程序就会加载到内存,由cpu执行我们的代码和指令,这就是进程。
  2. 程序可以作为一种软件资料长期存在,而进程是有一定生命期的,程序是永久的,而进程是暂时的。程序作为代码和数据的集合可以长期存在我们的计算机,而进程作为程序的执行过程,当这个过程走到结尾,进程的生命周期也结束了。
  3. 进程是操作系统将程序的代码和数据加载到内存当中,并且由操作系统创建进程控制块(PCB)来对该进程进行管理和控制。即进程实质是程序加载到内存的代码和数据以及对应PCB的集合。

三丶进程状态

 一般而言,每一个进程至少应该处于以下三种状态之一:

         1、就绪状态:这是指进程已处于准备好运行的状态,即进程已分配到除CPU以外的所有的必要资源后,只要获得CPU,便可立即执行。如果系统中有许多处于就绪状态的进程,通常将它们按一定的策略(如优先级策略)排成一个队列,称该队列为就绪队列。

        2、运行状态:这是指进程已获得CPU,其程序正在执行的状态。对任何一个时刻而言,在单处理机系统中,只有一个进程处于执行状态,而在多个处理机系统中,则有多个进程处于执行状态。

        3、阻塞状态这是指正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行时的状态,亦即进程的执行受到阻塞。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,一般把这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。通常系统将处于阻塞状态的进程也排成一个队列,称该队列为阻塞队列。实际上,在较大的系统中,为了减少队列操作的开销,提高系统效率,根据阻塞原因不同,会设置多个阻塞队列。

这里详细解释一下进程的阻塞状态:

进程阻塞:简而言之也可以说是进程因为等待某种资源就绪,而导致进程不推进的一种状态。例如,一个c语言程序调用了scanf,此时运行该程序,该程序的代码和数据被加载到内存,并产生了该程序的pcb/task_struct供操作系统进行管理,因为scanf函数要读取用户键盘的输入,此时如果用户不输入任何数据,那么该进程就会处于阻塞状态,该进程对应的pcb/task_struct,就要被放到等待相应资源的外设中的队列中去(这里的pcb就应该被放到键盘对应的队列中去等待资源),直到需要的资源就绪,才会重新被操作系统调度,cpu才会进行计算。

有别于进程阻塞,有一种特殊状态叫进程阻塞挂起:当内存不足时,操作系统会将一些处于阻塞状态的进程加载到内存中的代码和数据保存到磁盘上,释放掉代码和数据,从而为正在进行的进程腾出空间。

在linux操作系统中,我们通过命令行指令,可以查到每个进程的属性及具体状态。

R运行状态

进程处于正在执行的状态。

注意:一个状态显示为R状态的进程,不一定正在被CPU调度执行,所有处于CPU执行队列里面的进程的状态都是显示为R状态,表示该进程正在被CPU调度执行,或者正在等待被CPU调度执行。

S休眠状态

可以中断休眠,本质是一种阻塞状态。

下面是一个实验代码,方便我们更好理解进程的运行和阻塞状态,左边是进程的属性及状态等信息,右边是我们所写的程序:

 如果我们没有注释掉执行printf函数这行代码的话,该进程会访问外设,等待显示器的资源就绪(外设的处理速度远小于CPU的处理速度),此时进程会处于阻塞状态,也就是我们所查到的S+状态,而执行查询进程状态时,CPU所花费的时间远远小于等待外设就绪的时间,此时就会查出来进程是休眠状态,而一旦去掉printf函数,进程不再访问外设而在一直运行,那就能查出进程是R+状态,即该进程在CPU的运行队列当中。

而运行队列由操作系统维护,而操作系统也存在内存当中,即该运行队列也在内存中。

D磁盘睡眠状态

不可中断休眠,即使是操作系统也无法杀死这个进程。

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

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

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

T暂停状态

kill -17 +pid 暂停进程 显示T状态

kill -18 +pid 继续进程 但进程状态会变为S 即在后台运行的程序,不能被Ctrl+c终止,必须kill -9 +pid 来杀死该进程 调试过程中打断点,本质就是让进程暂停,状态是t,表示追踪时暂停

X死亡状态

一瞬间的状态,不好查到

Z僵尸状态

一个进程不会立即退出,而是保持僵尸状态,方便后续父进程(os)读取该子进程退出的退出结果。

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

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

相关文章

生成树协议 STP(spanning-tree protocol)

一、STP作用 1、消除环路:通过阻断冗余链路来消除网络中可能存在的环路。 2、链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。 二、STP选举机制 1、目的:找到阻塞的端口 2、STP交换机的角色&am…

UG\NX CAM二次开发 设置工序毛坯 UF_CAMGEOM_append_items

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 设置工序毛坯 UF_CAMGEOM_append_items 效果: 代码: static int init_proc(UF_UI_selection_p_t select, void* user_data) { int errorCode = 0; int num_triples = 1; UF_UI_mask_t mas…

JavaScript设计模式(五)——发布订阅模式、桥接模式、组合模式

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

Rokid Jungle--Max pro

介绍和功能开发 YodaOS-Master操作系统:以交换计算为核心,实现单目SLAM空间交互,具有高精度、实时性和稳定性。发布UXR2.0SDK,为构建空间内容提供丰富的开发套件 多模态交互 算法原子化 多种开发工具协同 多生态支持 骁龙XR2…

无swing,高级javaSE毕业之贪吃蛇游戏(含模块构建,多线程监听服务),已录制视频

JavaSE,无框架实现贪吃蛇 B站已发视频:无swing,纯JavaSE贪吃蛇游戏设计构建 文章目录 JavaSE,无框架实现贪吃蛇1.整体思考2.可能的难点思考2.1 如何表示游戏界面2.2 如何渲染游戏界面2.3 如何让游戏动起来2.4 蛇如何移动 3.流程图…

Jetsonnano B01 笔记7:Mediapipe与人脸手势识别

今日继续我的Jetsonnano学习之路,今日学习安装使用的是:MediaPipe 一款开源的多媒体机器学习模型应用框架。可在移动设备、工作站和服务 器上跨平台运行,并支持移动 GPU 加速。 介绍与程序搬运官方,只是自己的学习记录笔记&am…

QT 完成登陆界面跳转到聊天室+完成学生管理系统的查找和删除功能

一、完成登陆界面跳转到聊天室 1> 项目结构 2> 源码 ① .pro ②main #include "mywnd.h" #include"chatCli.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MyWnd w;w.show();Form f;QObject::co…

Vue2+Vue3基础入门到实战项目(前接六 副线一)—— 面经 项目

day1 接口文档地址&#xff1a;https://www.apifox.cn/apidoc/project-934563/api-20384515 一、项目功能演示 1.目标 启动准备好的代码&#xff0c;演示移动端面经内容&#xff0c;明确功能模块 2.项目收获 二、项目创建目录初始化 vue-cli 建项目 1.安装脚手架 (已安装…

对Spring核心思想的理解(二)

Spring的第二大核心思想&#xff0c;面向切面编程。 官方定义是&#xff1a;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;也是Spring框架中的一个重要内容&#xff0c;是函数式编程的一种衍…

【大数据实训】用Hbase模拟电影搜索引擎(四)

博主介绍&#xff1a;✌全网粉丝6W,csdn特邀作者、博客专家、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于大数据技术领域和毕业项目实战✌ &#x1f345;文末获取项目联系&#x1f345; 《云计算与大数据处理》课程大作业评分表 项目考核内…

python读取监控流通过websocket连接发送到java服务端,服务端推流到前端

python读取逐帧读取监控 import websocket import base64 import cv2 import numpy as npvideoPath "rtmp://ns8.indexforce.com/home/mystream" // 此为公开RTSP流def on_message(ws, message):print(1)def connection_tmp(ws):websocket.enableTrace(True)ws w…

时序分解 | MATLAB实现基于小波分解信号分解分量可视化

时序分解 | MATLAB实现基于小波分解信号分解分量可视化 目录 时序分解 | MATLAB实现基于小波分解信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于小波分解的分量可视化&#xff0c;MATLAB编程程序&#xff0c;用于将信号分解成不同尺度和频率的子信…

动态库的制作和使用

动态库和静态库的工作原理 配置环境变量 方式1&#xff1a; 坏处&#xff1a;环境变量是临时的 方式2&#xff1a; 1 用户级别的配置&#xff1a; 进入到/home&#xff0c;找到.bashrc&#xff0c;进入 先去找到库的路径 然后再到.bashrc最后一行输入路径 使其生效 2 系统…

芯片产业链补齐,中国成全球唯一拥有全部工业门类的国家

随着一款国产5G手机的发布&#xff0c;中国制造在芯片产业链方面也形成了自己的完整体系&#xff0c;成为全球唯一一个拥有全部工业门类的国家&#xff0c;这是非常值得高兴的消息。 中国早在2010年就成为全球最大制造国&#xff0c;不过当时中国制造所需要的芯片大多都需要从海…

解决img标签和p标签不能水平居中对齐的问题

现象如下&#xff1a; <div class"children"><div class"wrap"><ul><li class"product"><a href"#"><img src"./images/miphone1.jpg"><p>小米手机</p></a></li&…

【LeetCode-中等题】27. 移除元素

文章目录 题目方法一&#xff1a;快慢指针 题目 方法一&#xff1a;快慢指针 int fast 0;// 快指针 用于扫描需要的元素int slow 0;//慢指针 用于记录需要存放元素的位置class Solution { // 快慢指针public int removeElement(int[] nums, int val) {int fast 0;// 快指针…

页面分布引导新手指引(driver.js)

页面分布引导&#xff08;driver.js&#xff09; 最近由于有一个需求——做新手指引&#xff0c;在新用户进入页面的时候提供指引和帮助,快速让用户熟悉页面的功能,但是为了不要过多影响现有的页面逻辑和样式,找到一款非常好用的工具driver.js:Driver.js是一个功能强大且高度可…

golang-bufio 缓冲扫描

前面两篇博客&#xff0c;介绍了 bufio 包中的缓冲读和写&#xff08;bufio.go&#xff09;&#xff0c;下面再来介绍一下缓冲扫描&#xff08;scan.go&#xff09;。这个扫描的是用来对缓存读的更高级封装&#xff0c;提供了一些更易用的方法。 缓冲扫描 Scanner 提供了一个…

电子技术基础(三)__第2章放大电路原理__英文简称

静态分析&#xff0c; 又称为直流分析&#xff0c; 用于求出电路的直流工作状态&#xff0c; 即l输入信号 。 一 . 先看几个英文符号 : 集电极及发射极间电压, 简称管压降 : 发射结电压降&#xff0c; 二. 接着看 加上Q点的英文简称 Q点: 放大电路的静态工作点&#…

【Spring面试】二、BeanFactory与IoC容器的加载

文章目录 Q1、BeanFactory的作用是什么&#xff1f;Q2、BeanDefinition的作用是什么&#xff1f;Q3、BeanFactory和ApplicationContext有什么区别&#xff1f;Q4、BeanFactory和FactoryBean有什么区别&#xff1f;Q5、说下Spring IoC容器的加载过程&#xff08;※&#xff09;Q…