深入理解Linux进程管理机制
个人主页:chian-ocean
文章专栏-Linux
前言
进程是现代操作系统中一个不可或缺的概念,其主要目的在于管理资源、实现并发、提高系统效率,并确保系统的稳定性和安全性。
进程的定义
进程(Process) 是计算机操作系统中的一个基本概念,指的是一个正在运行的程序的实例。它是程序在计算机中执行的动态表现,不仅包含程序的代码(即可执行指令),还包括程序在运行时所需的各种资源,如内存、文件句柄、CPU时间等。
- 在理解操作系统的时候,OS是一个进行软硬件管理的软件。
- 进程通俗的理解就是一个被加载到内存的程序(进程也叫任务)
OS如何管理进程
在理解操作系统的时候提出来 ,OS进行管理是 先描述,后组织。
- 任何一个进程在被加载在内存的时候形成一个一个进程,这时候操作OS进行描述的过程。
PCB
PCB的理解
学校在对一个人管理学生的时候需要记录一个人的基本信息(是所有学生所共有的特征)有,姓名、身高、体重、身份证等等。OS引入了PCB(Process Ctrl Block)进程控制块:进程属性的集合(也就是描述的过程)
- 进程控制块(Process Control Block, PCB)是操作系统中用于描述和控制一个进程的最重要的数据结构。
- 可以把PCB理解为一个进程的“身份证”,它包含了操作系统对每个进程管理和调度所需要的所有信息。
- 当一个程序被创建并执行时,操作系统就为它创建一个PCB,用来追踪和管理它的状态。
PCB的内容
PCB
的本质就是结构体(struct),里面储存了各种各样的信息,例如:
- 进程标识信息:进程ID(PID),父进程ID(PPID),用于唯一标识进程和维护进程关系。
- 进程状态:描述当前进程的状态,如就绪、运行、阻塞等。
- CPU寄存器和程序计数器:保存当前的CPU状态,以便进行上下文切换。
- 内存管理信息:如页表、段表,用于描述进程的内存空间。
- 调度信息:包括进程优先级、时间片等,用于进程调度。
- 资源信息:记录进程打开的文件描述符和使用的I/O设备。
通俗的讲:进程控制块(PCB,Process Control Block)本质上是一个数据结构,它是操作系统用来描述、管理和控制一个进程的所有关键信息的集合
形象的表述为
# 进程 = PCB(内核操作系统数据结构) + 自己数据代码
通过复杂的数据结构相互联系,形成有序的属性集合的连接(组织的过程)
Linux系统下进程的管理
上述说OS是通过PCB进行进程的管理,在Linux
下的PCB是tast_struct
(tast_struct
是PCB的一种),Linux
下管理为2点
Linux
系统下通过task_struct
进行属性的描述。Linux
系统下本质是通过双链表进行连接,进而达到OS对进程的管理
查看正在跑的进程:
特别说明:
- CWD(Current Working Directory),即当前工作目录
- exe是你正在执行的文件
CWD的作用
- 文件路径解析:在操作文件时,如果给定的路径是相对路径,那么相对路径就是基于当前工作目录进行解析的。例如,如果当前工作目录是
/home/user
,而你输入命令cat example.txt
,系统会寻找/home/user/example.txt
这个文件。
查看标识符
# 输入:
ps ajx | head -1 ; ps ajx | grep 18549
看向第二行:
-
**PID(Process Identifier,进程标识符)**是操作系统分配给每个正在运行的进程的一个唯一标识符,用于区分不同的进程。
-
PPID(Parent Process Identifier) 是操作系统中用于标识一个进程的父进程的标识符。每个进程都有一个PID(Process ID),此外也有一个PPID,它用来表示该进程是由哪个进程创建的。
# 我们过滤信息,为什么会出现这一行
17986 18592 18591 17986 pts/1 18591 S+ 1000 0:00 grep --color=auto 18549# 我们在过滤信息的通过`grep`, 这个也是个进程,所以在查看进程时过滤信息时候,grep也存在。
通过系统调用可以调用到获得PID和PPID
1 #include<iostream>2 #include <unistd.h>3 #include<sys/types.h>4 using namespace std;5 6 int main()7 {8 while(true)9 {10 cout << "进程id:"<< getpid() <<endl; // 调用PID11 cout << "进程pid:"<< getppid() <<endl; // 调用PPID12 sleep(3);13 }14 return 0;15 }
执行结果:
ps ajx | head -1 ; ps ajx | grep 19038
bash
的PID是process
的PPIDbash
是process
的父进程,二者构成父子进程
通过系统调用创建进程
fork()介绍
fork()
是操作系统中的一个关键系统调用,用于在运行的进程中创建一个新的进程。它最常用于Unix和Linux操作系统中,通过调用fork()
,一个现有的进程可以复制出一个新进程。被创建的新进程被称为子进程(Child Process),而调用fork()
的原始进程被称为父进程(Parent Process)。
fork() 的返回值
fork()
系统调用的返回值非常重要,因为它可以帮助进程分辨自己是父进程还是子进程。
- 父进程中返回子进程的 PID:在父进程中,
fork()
的返回值是子进程的 PID(一个正整数),这意味着父进程可以知道新创建的子进程的进程标识符。 - 子进程中返回 0:在子进程中,
fork()
的返回值为0,这意味着子进程可以识别自己是由fork()
产生的副本。 - 错误返回值 -1:如果
fork()
调用失败,例如系统资源不足时,它会返回 -1,表示进程创建失败。此时,通常需要进行错误处理。
# 执行代码#include<iostream>2 #include <unistd.h>3 #include<sys/types.h>4 using namespace std;5 6 7 int main()8 {9 pid_t id = fork();10 11 if(id == 0)12 {13 while(true)14 {15 cout<<"子进程:"<< id << endl;16 sleep(5);17 }18 }19 else if(id > 0)20 {21 while(true)22 {23 cout<<"父进程:"<< id << endl;24 sleep(5); 35 return 0;36 }
查看进程:
# 执行 每3秒刷新一下进程
while : ; do ps axj | head -1 && ps axj | grep process | grep -v grep ; sleep 3 ;done
-
- 两个
process
上面进程 PID 23296 下面进程的PPID是 23296
- 两个
- 父子进程和的
PID
是 21346
当 fork()
被调用时,操作系统会:
-
操作系统创建一个新进程(子进程),并复制父进程的地址空间。此时父子进程的地址空间是独立的,但内容完全相同。
-
虽然父子进程的地址空间是复制的,但现代操作系统通常使用**写时复制(Copy-on-Write)**优化。即只有在进程修改数据时,才真正复制内存。
-
两个独立的进程在同时独立运行实现了返回值的不同,这就是为什么出现两个返回值。
如何实现区分:
-
操作系统在内核中维护进程表。当
fork()
被调用时,系统为子进程分配一个新的进程表项(即子进程的 PID)。 -
根据系统调用的上下文,内核可以清楚地知道当前执行的是父进程还是子进程,并返回相应的值。
-
上述代码在fork返回值的不同进程之间,数据发生了写时复制通过调用系统上下文对返回值进行确定。
什么出现两个返回值。
如何实现区分:
-
操作系统在内核中维护进程表。当
fork()
被调用时,系统为子进程分配一个新的进程表项(即子进程的 PID)。 -
根据系统调用的上下文,内核可以清楚地知道当前执行的是父进程还是子进程,并返回相应的值。
-
上述代码在fork返回值的不同进程之间,数据发生了写时复制通过调用系统上下文对返回值进行确定。
相关文章:
深入理解Linux进程管理机制
个人主页:chian-ocean 文章专栏-Linux 前言 进程是现代操作系统中一个不可或缺的概念,其主要目的在于管理资源、实现并发、提高系统效率,并确保系统的稳定性和安全性。 进程的定义 进程(Process) 是计算机操作系统中…...
OV2640摄像头模块介绍
目录 一、引言 二、模块概述 三、技术特点 四、工作原理 五、接口类型 六、应用领域 七、使用方法 八、参数设置 九、图像数据处理 十、调试和故障排除 十一、结语 一、引言 在当今的科技时代,图像采集和处理技术在众多领域发挥着至关重要的作用。其中&…...
机器人的动力学前馈控制
机器人前馈技术可加快伺服驱动器内部的误差收敛速度,进而改善机器人的动态响应特性,解决机器人在运动过程中的抖动问题,提升机器人系统的精度和效率。 对于关节型机器人而言,在理想的刚性连接下,若给定每个关节所需要的…...
Python+OpenCV系列:图像的几何变换
Python OpenCV 系列:图像的几何变换 引言 在图像处理领域,几何变换是一个非常重要的操作,它可以改变图像的位置、大小、方向或形状。在计算机视觉中,这些操作对于图像预处理、特征提取和图像增强至关重要。本文将介绍如何利用 …...
IC验证基础知识系列随笔
一、断言 and 和 和 intersect 区别 And 指的是两个序列具有相同的起始点,终点可以不同。 Intersect 指的是两个序列具有相同的起始点和终点。 Or 指的是两个序列只要满足一个就可以 Throughout 指的是满足前面要求才能执行后面的序列 二、Break;co…...
网络测速工具
1. SPEEDTEST https://www.speedtest.net/ 2. 测速网 测速网 - 专业测网速, 网速测试, 宽带提速, 游戏测速, 直播测速, 5G测速, 物联网监测,Wi-Fi 7,Wi-Fi 6,FTTR,全屋Wi-Fi - SpeedTest.cn 3. 字节比特换算 bps(bits per second) 字节和比特的换算…...
windows将文件推给Android真机/实机
记录一下 因为以前只试过从真机实机中将文件推给windows 但是从windows只简单复制粘贴的话会一直报错。 1.电脑安装adb 2.手机开启开发者模式 usb调试 3.usb连接选择文件传输 4.推送命令adb push 文件路径 /sdcard/download 步骤1和2和3不作赘述,可以搜相关配置教程…...
Scratch教学作品 | 3D飞行模拟器——体验飞行的无限乐趣! ✈️
今天为大家推荐一款令人惊叹的Scratch作品——《3D飞行模拟器》!由BamBozzle制作,这款游戏完全用Scratch构建,带你体验开放世界飞行的自由与乐趣。从起飞到降落,每一步都需要你的精准操作!更棒的是,这款游戏…...
nonolog转化为ctf的困难
nonolog转化为ctf的困难 nanolog分析的中间的总结二者之间的差别 nanolog分析的中间的总结 如果目标是转nanolog为CTF格式,最重要的应该是meta的定义的转换的问题了。 目前我是稍有气馁。 感觉这不是一个好的方向。 如果领导能给连续的时间,完全开发自定…...
Sqoop导入数据(mysql---->>hive)
目录 数据传输流程脚本报错和异常说明1. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf2. 数据导入hive后显示NULL 数据传输流程 mysql---->>hdfs---->>hive 数据从mysql表中取出,放到hdfs上(由targ…...
vivado bd文件复制
不同工程是无法进行BD文件复制的,可以通过将被复制的BD文件添加到需要复制的BD文件的工程中,然后再工程内进行复制...
2024年深圳杯数学建模C题编译器版本的识别问题解题全过程文档及程序
2024年深圳杯数学建模 C题 编译器版本的识别问题 原题再现: 作为一种重要的工具,电子计算机自诞生以来,经历了极为快速的发展。区区百年的时间内,无论从体积、能耗、计算速度,还是应用能力等方面,电子计算…...
介绍一下希尔排序法(c基础)
hi , I am 36 适合对象c语言初学者 希尔排序(Shell Sort)是一种改进的插入排序算法,它通过将原始数据分成多个子序列来改善插入排序在处理大规模无序数组时性能较差的情况。 基本原理 希尔排序的基本思想是先将整个待排序的记录序列分割成为…...
SQL,根据数据的时间跨度进行不同粒度的统计
MSSQL 的某个视图会生成时间跨度不同的数据,当时间跨度小于 30 天时: idbranchIdtotalPricecreatedAt8512718.662022-07-03 08:49:27.7272613832.692022-07-06 09:08:06.8808919569.852022-07-07 04:13:09.2308011523.622022-07-07 04:38:29.3131512500…...
OPenCV 图片局部放大
m_image cv::imread("C:/Code/JPG/1.jpg");if (m_image.empty()) return;cv::imshow("原始图像", m_image); // TODO: 在此添加控件通知处理程序代码int width m_image.cols;int height m_image.rows;// 确定要放大的区域(这里是图像中心部分…...
【C#设计模式(19)——备忘录模式(MementoPattern)】
前言 备忘录模式:将想要备份的信息交给备忘录对象来管理。通过设置初始、备份、修改、恢复等状态展示备忘录模式的使用。 代码 //备忘录类 public class Memento {private string state;public string State { get>state;}public Memento(string state){this.st…...
使用 Nginx 在同一端口部署两个前端项目并配置子路径
在现代 Web 开发中,我们经常需要在同一台服务器上部署多个前端项目。这不仅可以节省资源,还可以简化管理。本文将指导你如何使用Nginx在同一端口上部署两个前端项目,并通过配置子路径来区分它们。 环境准备 首先,我们需要准备两…...
CISC和RISC的区别
CISC是什么 CISC是一种指令集设计方式,全程叫复杂指令集,这种指令设计模式包含大量的复杂指令和复杂的寻址方式, 以下是CISC架构的一些主要特点: 丰富的指令集:CISC处理器通常包含大量的指令,这些指令覆盖…...
学生信息管理系统(简化版)后端接口
目录 allAPI __init__.py是空文件,目的让python知道这个文件夹是个包 ClassInfo.py from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from API.database import get_db, Base from sqlalchemy import Column, String,…...
一、开启 GD32 单片机的学习之门
文章目录 一、开启GD32单片机的学习之门二、筑牢根基:GD32单片机基础知识全解析(一)单片机概述 三、开发环境搭建(一)软件下载与安装(二)安装GD32F450设备支持包(三)编译…...
计算生成报价单小程序系统开发方案
计算生成报价单小程序报价系统,是根据商品品牌、类型、型号、规格、芯数、特性、颜色、分类进行选择不同的参数进行生成报价单,要求报价单支持生成图片、pdf、excel表格。 计算生成报价单小程序系统的主要功能模块有: 1、在线生成报价单&…...
高效整合聚水潭库存数据至MySQL的实现
聚水潭数据集成到MySQL:商品库存查询案例分享 在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,将聚水潭的商品库存数据高效、可靠地集成到MySQL数据库中。具体方案为“聚水潭-商品库存查询-->BI彩度-商品库存表”࿰…...
深入理解 JVM 的栈帧结构
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
爬虫基础之HTTP基本原理
URL和URI 我们先了解一下 URI和 URL。URI的全称为 Uniform Resource ldentifer,即统一资源标志符;URL的全称为 Universal Resource Locator,即统一资源定位符。它们是什么意思呢?举例来说,https:/github.com/favicon.ico 既是一个 URI,也是…...
PyQt5:一个逗号引发的闪退血案
【日常小计】 在开发PyQt5程序时,调用了一个写入excel表格的后端方法,但是每次打开页面点击对应的动作,窗口就会闪退,而且Python后台也没有提示出任何的异常堆栈,后来经过在后端一点一点的单点测试,终于发…...
python学opencv|读取图像(五)读取灰度图像像素
【1】引言 前序学习了图像的基本读取,掌握了imread()、imshow()和imwrite()函数的基本功能和使用技巧,参考文章链接为: python学opencv|读取图像-CSDN博客 然后陆续掌握了彩色图像保存、图像放大和缩小以及对imshow()函数的大胆尝试技巧&a…...
LiDAR点云 反射强度 常见物体反射强度
1.激光点云发射的点无法全部被反射回来的原因 激光点云发射的点无法全部被反射回来的原因主要包括以下几点: 目标物表面特性:某些物体表面具有高反射率,导致激光雷达接收到的反射能量过强,从而产生噪点,影响点云数据的…...
零基础微信小程序开发——WXML 模板语法之事件绑定(保姆级教程+超详细)
🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容 🌸个人主页: 长风清留杨的博客 🍃形式准则: 无论成就大小,…...
qt QNetworkAccessManager详解
1、概述 QNetworkAccessManager是QtNetwork模块中的一个核心类,它允许应用程序发送网络请求并接收响应。该类是网络通信的基石,提供了一种方便的方式来处理常见的网络协议,如HTTP、HTTPS等。QNetworkAccessManager对象持有其发送的请求的通用…...
在2023idea中如何创建SpringBoot
目录 一.下载和安装 Maven 1.前往 https://maven.apache.org/download.cgi 下载最新版的 Maven 程序 2.将文件解压到D:Program FilesApachemaven目录 3.新建环境变量MAVEN_HOME,赋值D:Program FilesApachemaven 4.编辑环境变量Path,追加%MAVEN_HOME…...
R语言医学数据分析实践-R语言的数据结构
【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言编程_夏天又到了的博客-CSDN博客 在R语言中,数据结构是非常关键的部分,它提…...
PID算法
PID算法是闭环控制中的核心算法之一,它结合了比例(P)、积分(I)和微分(D)三种控制策略,能够实现对被控对象的精确控制。以下将详细介绍PID算法,并针对P、I、D分别举出三个…...
C++day2
1.利用函数重载,实现对整形数组的冒泡排序,对浮点型数组的冒泡排序 #include <iostream>using namespace std;int bubblesort(int a[]) {int i,j,temp;for(i1;i<5;i){for(j0;j<5-i;j){if(a[j]>a[j1]){temp a[j];a[j] a[j1];a[j1] tem…...
RFdiffusion ContigMap类初始化方法解读
功能概述 __init__ 方法是 ContigMap 类的初始化函数,其核心任务是构建和管理一个蛋白质序列和结构的映射系统,处理用户提供的输入数据(如片段信息、参考序列、掩码等),并生成内部所需的各种索引和映射,以便在蛋白质设计中有效地定义、解析和操作不同区域的结构和序列。…...
LeetCode 每日一题 2024/12/2-2024/12/8
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 12/2 52. N 皇后 II12/3 3274. 检查棋盘方格颜色是否相同12/4 2056. 棋盘上有效移动组合的数目12/5 3001. 捕获黑皇后需要的最少移动次数12/6 999. 可以被一步捕获的棋子数…...
5G模组AT命令脚本-关闭模组的IP过滤功能
关闭模组的IP过滤功能 关闭模组的IP过滤功能 5G 模组通常使用nat方式为 下挂设备或上位机提供上网服务,默认情况,不做NAt的包无法经由 模组转发,如果禁掉这个限制 ,可使用本文中的配置命令本脚本用于关闭模组的IP过滤功能…...
得力DL-720C(new)标签热敏打印机
特点 适配标签宽度20-90mm的热敏标签纸,无需碳带。不适用于使用碳带上色的热转印纸(如铜版纸)。标签纸类型支持: 间隙纸(靠间隙定位)。得力自配的纸就是间隙纸,不透明。黑标纸(靠背…...
openjdk17 jvm加载class文件,解析字段和方法,C++源码展示
##构造方法ClassFileParser,parse_stream解析文件流 ClassFileParser::ClassFileParser(ClassFileStream* stream,Symbol* name,ClassLoaderData* loader_data,const ClassLoadInfo* cl_info,Publicity pub_level,TRAPS) :_stream(stream),_class_name(NULL),_load…...
基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人
导读 本文将详细介绍如何通过 PingCAP 开源项目 AutoFlow 实现快速搭建基于 TiDB 的本地知识库问答机器人。如果提前准备好 Docker、TiDB 环境,整个搭建过程估计在 10 分钟左右即可完成,无须开发任何代码。 文中使用一篇 TiDB 文档作为本地数据源作为示…...
Vue项目实战-新能源汽车可视化(二)(持续更新中)
一.项目代码 1.DataSceen <template><div id"app-content"><div class"containerBox"><!-- 左边区域 --><div classleft><!-- 车辆情况 --><div class"item"></div><!-- 历史数据 -->&…...
CSS border 0.5px 虚线
border 0.5px 存在很多兼容问题,很多设备都会默认展示 1px 如果是实线可以用 background 和 height 1px 然后transform scaleY(0.5) 去实现。 但是虚线怎么办呢。 .ticket-line::before {content: ;position: absolute;top: 0;left: 0;right: 0;bottom: 0;width: …...
利用最大流算法解决Adam教授的双路径问题
利用最大流算法解决Adam教授的双路径问题 Adam教授的烦恼问题描述与转换转换步骤伪代码C代码示例解释Adam教授的烦恼 Adam教授有两个儿子,可不幸的是,他们互相讨厌对方。随着时间的推移,问题变得如此严重,他们之间不仅不愿意一起走到学校,而且每个人都拒绝走另一个人当天…...
c#如何开发后端
1选择开发框架 在 C# 中,用于后端开发最常用的框架是ASP.NET。它提供了构建 Web 应用程序、Web API 和微服务等多种后端服务所需的功能。ASP.NET有不同的模式,如ASP.NET MVC(Model - View - Controller)和ASP.NET Web API。ASP.NE…...
05_掌握Python3.11新特性-模式匹配
学习完本篇内容,你将掌握以下技能: 了解 Python 3.11 中的模式匹配新特性掌握如何使用模式匹配来简化代码和提高代码的可读性熟练掌握并应用到实际编程中python3.11新特性-模式匹配 在 Python 3.11 中,引入了模式匹配(pattern match...
【AI日记】24.12.09 kaggle 比赛 Titanic-12
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容: 学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster学习机器学习(pandas,numpy,sklearn),数据可视化ÿ…...
Linux,如何要定位并删除占用磁盘空间的大文件?
Linux,如何要定位并删除占用磁盘空间的大文件? 要定位并删除占用磁盘空间的大文件主要有以下这些步骤: 1. 使用 du 命令查找大文件或目录 du(Disk Usage)命令可以帮助你查找占用空间较大的文件或目录。 du -ah --…...
【Java】—— 图书管理系统
基于往期学习的类和对象、继承、多态、抽象类和接口来完成一个控制台版本的 “图书管理系统” 在控制台界面中实现用户与程序交互 任务目标: 1、系统中能够表示多本图书的信息 2、提供两种用户(普通用户,管理员) 3、普通用户…...
初识Linux · 线程同步
目录 前言: 认识条件变量 认识接口 快速使用接口 生产消费模型 前言: 前文我们介绍了线程互斥,线程互斥是为了防止多个线程对临界资源访问的时候出现了对一个变量同时操作的情况,对于线程互斥来说,我们使用到了锁…...
游戏引擎学习第40天
仓库 : https://gitee.com/mrxiao_com/2d_game 整理了一些需要完成的任务,确保所有内容都已清理完成,因为需要为后续的数学部分打好基础。下一步将认真开始处理数学相关内容,因此在此之前,需要彻底梳理未完成的事项,清…...
概率论——假设检验
解题步骤: 1、提出假设H0和H1 2、定类型,摆公式 3、计算统计量和拒绝域 4、定论、总结 Z检验 条件: 对μ进行检验,并且总体方差已知道 例题: 1、假设H0为可以认为是570N,H1为不可以认为是570N 2、Z…...