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

进程概念详解

目录

进程是什么?

描述进程:进程控制块-PCB

task_struct 

task_struct 是什么?

task_struct内容分类

组织进程 

查看进程 

fork创建子进程

进程状态 

 僵尸进程

孤儿进程 

进程优先级 

其他概念 


进程是什么?

一般书上说:进程是运行当中的程序,是担当分配资源的实体。

那么?程序是如何被运行的呢?

我们写好程序代码后,会将程序文件存储到磁盘中,要运行一个程序,首先会将程序代码文件加载到内存中,然后由cpu去运行。

但是,只要程序被加载到内存,它就是一个完整的进程吗?进程和程序仅仅是存储位置不同吗?

当然不是,进程需要消耗资源,那么它就一定会被操作系统所进行管理。

操作系统要管理:首先要先描述,再组织

那么操作系统如何对进程进行管理呢?

描述进程:进程控制块-PCB

当程序被加载到内存后,操作系统会为该程序创建进程控制块,简称PCB,PCB当中存储着该进程属性的集合。

所以,完整的进程是什么?

进程=程序代码数据+相关数据结构(也就是进程控制块)。 

  

task_struct 

task_struct 是什么?

task_struct 是linux当中描述进程的结构体,它存储着进程信息。

task_struct与PCB的关系就是,task_struct是一种具体的PCB,它是linux环境下具体的PCB。 

task_struct内容分类

 标识符:描述本进程的唯一标识,简称PID。

状态:任务状态,退出代码,退出信号等

优先级:相对于其他进程的优先级。

 程序计数器:程序中即将被执行的下一条指令的地址。

内存指针 :包括程序代码和相关数据的指针,还有和其他进程共享的内存块指针。

 上下文数据:进程执行时,处理器的寄存器当中该进程的数据。(下文详解)

I/O状态信息:显示的IO请求,分配给进程的IO设备和被进程使用的文件列表。

记账信息:包括处理器时间总和,使用的时钟数总和,时间限制,记帐号等。

 其他信息

组织进程 

每个进程都对应着一个进程控制块,操作系统将这些进程控制块用链表形式组织起来,这样对于进程的管理,就变成了对链表的增删查改。

 

查看进程 

获取PID:getpid()

获取PPID:getppid(),PPID表示父进程的ID。

getpid(),getppid()属于系统调用,头文件为sys/types.h 

我们使用的XShell软件本质就是一款命令解释器,我们输入指令后,shell不会自己去解释指令,而是会产生子进程bash去解释这条指令给内核。

为什么要这么做呢?因为如果我们输入了错误指令,产生了错误影响,不能影响我xshell运行,

就相当于某公司员工出了问题,为了不影响公司声誉,公司对外宣称该员工与公司无关。

这样即使出了问题,也不影响公司的整体运行。

这样就由bash来解释这条指令,bash进程就是该指令的父进程。 

每个进程被创建后,会在/proc目录下以该进程PID为名形成目录。 

我们可以通过ls /proc/pid查看该进程

 

 下面我们通过ls -l指令查看该进程详细信息。

 两个重要概念:cwd:表示当前工作目录,程序当中创建文件,默认在该目录下。

                           exe:表示当前执行的程序是谁。

我们也可以通过其他指令查看进程信息。

 ps axj 或 ps ajx或 top

 

fork创建子进程

 fork属于系统调用,作用是创建子进程。

fork函数有两个返回值,对于父进程返回子进程pid,对于子进程返回0

 通过fork函数,可以让一个程序产生两个不同的结果。

通过fork创建的子进程,子进程的PCB以父进程为模板构建,子进程的代码完全和父进程共享,因为代码是不可以被更改的,而父子进程的数据是临时共享的,当父子进程数据要更新时,会发生写时拷贝,因为进程之间是相互独立的,为了防止一个进程数据改变时影响另一个进程,所以在数据发生改变时,对数据拷贝再更改,保证进程之间的独立性。

进程状态 

 下面展示linux状态源码:

/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
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状态:并不意味着进程在被运行,它表明进程要么在运行中,要么在运行队列里。

S状态:休眠状态,等待事件完成,可以被唤醒。

D状态:深度休眠状态,与S状态相似,但是不可被操作系统杀死。

T状态:暂停状态,无法被唤醒。

X状态:死亡状态

Z状态:僵尸状态

当进程所需资源充足,满足运行条件时,该进程的PCB会被调度模块分配到运行队列中,等待cpu运行,而其他不满足运行条件的进程,被放在等待队列中,称为挂起或阻塞状态

但是为什么R状态并不意味着该进程一直在运行呢?

还是因为资源问题,你这个进程要运行10s,操作系统要是一直让你运行,其他进程怎么办呢?

所以,我们从资源管理器中看到很多进程占用资源,好像一直在运行,这是错误的。

看似好多进程一直在运行,其本质是操作系统根据时间片(单个进程的单次运行最长时间,灰常短),快速切换进程运行的结果。

运行队列进程处于R状态,而等待队列进程处于S或D或T状态。 

 当系统负载高时,资源不够用,操作系统可能会杀掉S状态,而D状态进程处于深度睡眠,不可中断,即使你是操作系统也无法给他杀掉(D状态就是爷,不干事,你也管不了我)。

 到这里,问题又来了,既然操作系统不让进程一直运行,一直在切换,那么我怎么知道你这个程序运行到哪一步呢?

因为只有一份寄存器,所以进程在离开时,要将数据拷贝一份,再下次回来运行的时候,再把数据拷贝回寄存器,然后接着运行。

这种与进程强相关的临时数据就被称作上下文数据

T状态 :

我们可以通过发送SIGSTOP 使进程进入T状态,也就是发送SIGCONT使进程退出T状态。

  

我们可以发现退出T状态后S少了+号,这表示该进程由前端运行变成后端运行,后端运行时,我们可以输入命令,而前端不行。

 X,Z状态:

当程序执行完毕,直接退出是不行的!操作系统需要知道你这个程序是正常结束,还是非正常结束,要是没有这一步,万一出错,谁背锅?

所以,在程序执行完毕后,该进程会先进入Z状态,也就是僵尸状态,此时由父进程读取其退出码,

读取完毕后,进入X状态,也就是死亡状态,接着才被操作系统释放。

我们无法观测到X状态,因为一进入X状态,该进程立马就被释放了。

 僵尸进程

 处于僵尸状态的进程就是僵尸进程。

下面举一个例子:父进程一直处于运行态,不读取子进程退出码,此时子进程就会一直处于僵尸状态。 

 

 那么,僵尸进程有什么危害呢?

僵尸状态必须一直持续,直到父进程读取它的退出码。

僵尸状态也需要被维护。维护僵尸状态就是要维护它的数据信息,PCB。

那么一直不回收就是造成内存资源浪费,造成内存泄漏。

孤儿进程 

 子进程没噶,父进程先噶,此时子进程会被1号进程接管。

这种进程就叫孤儿进程。

进程优先级 

 进程优先级,表示cpu资源分配的先后。

 优先级高,先分配。

 通过优先级,可以极大提高系统性能。

查看系统进程优先级:ps -al 

进程优先级为PRI,值越小优先级越高。

而NI表示nice值,表示优先级修正值。 

默认PRI为80

PRI(new)=PRI(old)(默认为80)+ NI

 NI有40哥级别,-20到19.

修改nice值:top指令 进入后按r 

其他概念 

竞争性:进程数目多,而cpu只有几个,甚至一个,所以进程之间具有竞争属性,为了高效运行,便有了优先级。

独立性:多个进程之间,独立享受资源,运行期间互不干扰。

并发性:多个进程在一个cpu下通过切换,不同时运行,一段时间内,让多个进程都得以推进。

并行性:多个进程在多个cpu下分别执行,同时运行。

相关文章:

进程概念详解

目录 进程是什么? 描述进程:进程控制块-PCB task_struct task_struct 是什么? task_struct内容分类 组织进程 查看进程 fork创建子进程 进程状态 僵尸进程 孤儿进程 进程优先级 其他概念 进程是什么? 一般书上…...

C语言基础——指针

文章目录一、指针1.指针的意义2.指针类型表示3.一些操作3.1打印1个变量地址3.2通过地址查看改地址的内容以及修改改地址的内容3.3操作某个空间 -- 4个字节,给他赋值为100,只知道该空间的地址0x8000 00004.指针变量的定义5.指针类型的大小6.指针变量的使用6.1 指针变…...

反序列化渗透与攻防(二)之Java反序列化漏洞

Java反序列化漏洞 反序列化漏洞 JAVA反序列化漏洞到底是如何产生的? 1、由于很多站点或者RMI仓库等接口处存在java的反序列化功能,于是攻击者可以通过构造特定的恶意对象序列化后的流,让目标反序列化,从而达到自己的恶意预期行为,包括命令执行,甚至 getshell 等等。 …...

优先级队列的模拟实现(仿函数)

目录: 1.priority_queue接口的实现(先建大堆) 1.push 加 向上调整的实现 2.pop 3.迭代器区间的构造 2.仿函数 3.仿函数优化我们的优先级队列 -------------------------------------------------------------------------------------------…...

Python pandas和numpy用法参考(转)

以下是转载:Python pandas用法 - 简书介绍 在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处...https://www.jianshu.com/p/840ba1…...

mysql数据库的在线数据备份与数据恢复

MySQL是一种常用的关系型数据库管理系统,它支持在线备份和恢复数据。在线备份指的是在MySQL数据库运行时备份数据,而不会中断或影响现有的数据库服务。在本文中,我们将介绍MySQL数据库的在线数据备份和恢复的原理和操作步骤。 一、备份原理 …...

Vue3自定义指令之前端水印功能实现

一、前置知识 — Vue 中的自定义指令 先来说说 vue2和vue3中自定义全局指令的区别 相同点:指令的应用场景,原理是一致的; 不同点:生命周期钩子函数名,指令定义的格式不一样。 vue2中自定义全局指令: 定义…...

文章生成器写出来的原创文章

文章生成机器人 文章生成机器人是一种基于人工智能技术和自然语言处理算法的程序,可以自动地生成高质量、原创的文章。 文章生成机器人的优点如下: 提高工作效率:文章生成机器人能够在较短的时间内自动帮助用户生成大量的文章,提…...

2023年全国最新高校辅导员精选真题及答案49

百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 76.气质就是我们平常所说的脾气秉性。 答案:正确 77.社会心理通常是通过社会…...

【STL十】关联容器——set容器、multiset容器

【STL十】关联容器——set容器、multiset容器一、set简介二、头文件三、模板类四、set的内部结构五、成员函数1、迭代器2、元素访问3、容量4、修改操作~~5、操作~~5、查找6、查看操作六、demo1、查找find2、修改操作insert3、修改操作erase、clear七、multisetset和multiset会根…...

什么是Node.js

文章目录什么是Node.js简介常用命令Node内置模块Node.js和JavaScript的区别什么是Node.js 简介 Node.js是一个基于Chrome V8引擎的JavaScript运行环境。它允许开发者使用JavaScript编写服务器端代码,而不仅仅是浏览器端的代码。Node.js的出现使得JavaScript可以在…...

比GPT-4 Office还炸裂,阿里版GPT全家桶来袭

疯狂3月的那一天,一切还历历在目。 微软突然在发布会上放出大招,用Microsoft 365 Copilot掀起了办公软件革命。 而今天,阿里也放出一枚重磅炸弹——阿里版的Copilot也要来了! 并且比微软更彻底的是,阿里全系产品也都…...

mysql 建表约束

主键约束 -- 主键约束 -- 使某个字段不重复且不得为空,确保表内所有数据的唯一性。 CREATE TABLE user (id INT PRIMARY KEY,name VARCHAR(20) );-- 联合主键 -- 联合主键中的每个字段都不能为空,并且加起来不能和已设置的联合主键重复。 CREATE TABLE …...

在Vue项目中使用tinymce富文本编辑器

TinyMC编辑器简介 TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。跟其他富文本编辑器相比,有着丰富的插件,支持多种语言,能够满足日常的业务需求并且免费。 TinyMCE的优势: 开源可商用,基于LGPL2.1 插…...

GPT-4 和ChatGPT API的定价分析

OpenAI发布了他们的ChatGPT新机器学习模型GPT-4。GPT-4是GPT-3的一大进步,GPT-3是当前ChatGPT免费版本(GPT 3.5 Turbo)所运行的模型的基础,今天我们也来凑个热点,研究一下它们的定价 GPT-4新的功能 GPT-4可以在对话中使用图像,并…...

基于html+css的盒子展示2

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...

【持续更新篇】SLAM视觉特征点汇总+ORB特征点+VINS前端

Harris角点 opencv函数 cornerHarris提取输入图像的Harris角点 检测原理 检测思想:使用一个固定窗口在图像上进行任意方向的滑动,对比滑动前后的窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有较大灰度变化&#xf…...

【C语言】初阶指针(指针及其类型以及野指针)

简单不先于复杂,而是在复杂之后。 目录 1. 指针是什么? 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 1. 指针是什么? 指针理解的两个要点: 1. 指针是内存中最小…...

UDS统一诊断服务【六】访问时序参数0X83服务

文章目录前言一、访问时序参数服务介绍二、数据格式2.1 请求报文2.2 子功能2.3 响应三、举例前言 本文介绍UDS统一诊断服务的访问时序参数0X83服务,希望能对你有所帮助 一、访问时序参数服务介绍 这个服务我目前在项目中没怎么用到过,先来看看ISO14229…...

Linux应用编程(文件属性与目录)

本章将会讨论如下主题内容。 ⚫ Linux 系统的文件类型; ⚫ stat 系统调用; ⚫ 文件各种属性介绍:文件属主、访问权限、时间戳; ⚫ 符号链接与硬链接; ⚫ 目录; ⚫ 删除文件与文件重命名。 一、Linux 系统中…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络&#xf…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...