【Linux课程学习】:进程描述---PCB(Process Control Block)

news2025/2/23 4:12:48

🎁个人主页:我们的五年

🔍系列专栏:Linux课程学习 

🌷追光的人,终会万丈光芒

🎉欢迎大家点赞👍评论📝收藏⭐文章

目录

1.基本概念:

🥝进程的概念

🥝进程描述的引入

🥝PCB的概念:

PCB(Process Control  Block)

🍒Linux最早版本的task_struct有那些属性:

​编辑

🍒查看进程的信息:

方法一:

 方法二:

​编辑🍒进程里的两个重要信息:

cwd(current work dir):可以更改

exe:

 进程的分类

⚽️常驻进程:

⚽️非常驻程序:

PCB中标识符---pid(Process  Identifier):

🏀pid的引入:

🏀如何在程序中获得pid:

🏀如何通过进程pid杀死一个进程:

 PCB---ppid:


 

1.操作系统OS也是一个软件,在开机的时候被加载到内存进行运行,到这里才能让操作系统帮我们去运行其他的程序。

2.为什么要有PCB?(先描述,再组织)

因为操作系统要管理进程,管理系统之前就必须对进程进行描述。

3.命令也是一个进程,过滤查看的时候能查到。

4.让程序运行起来,本质就是启动了一个进程。命令也是系统中的一个命令,所以我们执行命令的时候,也是启动了一个进程。

5.ps查看进程的信息其本质也是去/proc目录下查找。

6./proc不是磁盘级的文件,是内存级的。

7.命令行执行,都是bash进程创建子进程,然后通过子进程程序替换达到要运行程序的目的。

这样当执行的程序发生错误,也不影响bash进程。

8.(void)取消编译器对不用变量的警告。

9.Linux进程时树形结构。


1.基本概念:

🥝进程的概念

进程的概念
课本概念程序的一种执行实例,正在执行的程序。
内核观念担当分配系统资源的实体(CPU,内存)。

🥝进程描述的引入

我们写的程序(code.c)首先要编译成二进制程序(code.exe)。这两个程序都是文件,保存在磁盘中。

要想让code.exe文件运行,首先code.exe要加载到内存中,加载的本质是拷贝,也就是把code.c拷贝到内存中。(input)

在计算机中,会有很多的进程,要管理进程,就要对进程进行描述。把对应的文件加载到内存中,不单单要加载它的代码和属性,还有为它创建一个struct进行描述。进程的描述有进程的一系列属性。

🥝PCB的概念:

进程信息会放到一个叫进程控制块的数据结构中,可以理解为进程属性的集合。包含进程的属性。

在Linux操作系统中的PCB是task_struct。

每一个进程都会有一个PCB进行管理。

进程=PCB(task_struct)+代码和数据。

所以一个进程被加载到内存,最本质的操作系统为其在进程管理列表中创建了一个PCB(task_struct)。

进程在等待被运行,其也是task_struct在进行等待。task_struct中有属性信息,可以根据这些信息进行先后排队。


PCB(Process Control  Block)

🍒Linux最早版本的task_struct有那些属性:

🍒查看进程的信息:

方法一:

ps ajx | grep (进程名):查看此时进程信息。

ps ajx |head -1:打印属性名称,

;或者&&:可以执行多条命令。

ps ajx | head -1 && ps ajx | grep code | grep -v grep :只查看./code的信息。

ps的底层就是去/proc中查找。

为什么我们查code程序的时候,会有code?

上面我们执行的命令也是一个进程,执行到code命令的时候,也是一个进程,它的关键字也有code,所以也过滤出来了。

 方法二:

在更目录下的proc目录中查看进程的信息:

ls  /proc:查看所有进程的信息。

每一个目录代表一个进程,目录里面就是该进程的信息。

每次我们新建一个进程,就会在这个文件夹中新建一个以该进程pid为名称的文件夹,这个文件夹存放我们新建进程的信息。

当我们删掉这个进程时,刚刚新建的文件被删除了,所以这个文件的信息是动态更新的。(所以它是内存级的)

🍒进程里的两个重要信息:

cwd(current work dir):可以更改

表示当前的工作路径,如果我们不表示路径,直接新建一个文件,会用cwd的路径进行文本拼接,就让新建的文件在当前的目录。

当进程启动的时候,就会记录当前所在的路径。

改变cwd

chdir:可以改变进程的cwd路径

通过这样的方法,可以验证程序是根据cwd路径进行创建文件的。

 #include <stdio.h>                                                                                                                                                                                             
 #include <unistd.h>
 #include <stdlib.h>
 
 int main()
 {
     chdir("/home/kym/linux-code");
     FILE* fp=fopen("log.text","w");
 
     while(1)
     {
         printf("我的pid是:%d\n",getpid());
         sleep(1);
     }
     fclose(fp);
     return 0;
 }
 

exe:

表示该可执行程序在磁盘的哪个位置。当程序启动的时候,如果我们根据这个路径去删除可执行文件。此时刚刚执行的文件不会停止。因为当程序运行,它会拷贝到内存中,而我们删除的是磁盘中的文件。

此时的exe显示文件被delete


 进程的分类

⚽️常驻进程:

用户不主动关闭,就一直存在。比如我们启动的应用。

⚽️非常驻程序:

执行完就会退出的程序。比较一系列的指令:ls,pwd指令。


PCB中标识符---pid(Process  Identifier):

🏀pid的引入:

我们使用的系统中,会有很多的进程,但是靠进程的名字字符串去区分不同的进程有点不方便,而且可能还会有相同名字的进程,这样就更不好区分了。所以给每个进程都引入了一个唯一的标识符pid。

标识符(pid):描述本进程的唯一标识符,用于区分别的进程。

🏀如何在程序中获得pid:

通过函数getpid获得,返回值就是该进程的pid值。一个程序只要不是重新被加载到内存进行运行,它的pid是不变的,所以只要getpid一次,保存好pid就可以了。

pid_t定义的一种类型,其本质就是整数。

头文件:

#include <sys/types.h>
#include <unistd.h>

函数原型:

pid_t getpid(void);
pid_t getppid(void);

🏀如何通过进程pid杀死一个进程:

kill -9 (进程pid):-9表示SIGKILL

通过信号进行杀死进程。


 PCB---ppid:

ppid代表父进程的pid值。

新建的进程都是由父进程创建的,每一个进程都会有父进程,bash进程除外。

当我们每次运行同样一个程序,发现每次的ppid都是一样的。然后我们通过ps查的这个pid是bash进程的pid。

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

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

相关文章

java基础概念36:正则表达式1

一、正则表达式的作用 作用一&#xff1a;校验字符串是否满足规则&#xff1b;作用二&#xff1a;在一段文本中查找满足要求的内容。——爬虫 二、正则表达式 2-1、字符类 示例&#xff1a; public static void main(String[] args) {System.out.println("a".matc…

设计模式之 命令模式

命令模式&#xff08;Command Pattern&#xff09;是行为型设计模式之一&#xff0c;它将请求&#xff08;或命令&#xff09;封装成一个对象&#xff0c;从而使用户能够将请求发送者与请求接收者解耦。通过命令模式&#xff0c;调用操作的对象与执行操作的对象不直接关联&…

GRU (门控循环单元 - 基于RNN - 简化LSTM又快又好 - 体现注意力的思想) + 代码实现 —— 笔记3.5《动手学深度学习》

目录 0. 前言 1. 门控隐状态 1.1 重置门和更新门 1.2 候选隐状态 1.3 隐状态 2. 从零开始实现 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 3 简洁实现 4. 小结 0. 前言 课程全部代码&#xff08;pytorch版&#xff09;已上传到附件看懂上一篇RNN的所有细节&am…

实践篇:青果IP助理跨境电商的高效采集

写在前面&#xff1a; 近年来&#xff0c;跨境电商行业迅速崛起&#xff0c;成为全球贸易的重要组成部分。据市场调研机构Statista数据显示&#xff0c;2024年全球跨境电商市场规模预计将突破5万亿美元&#xff0c;覆盖数十亿消费者。跨境电商的竞争日益激烈&#xff0c;商家不…

电子应用设计方案-16:智能闹钟系统方案设计

智能闹钟系统方案设计 一、系统概述 本智能闹钟系统旨在为用户提供更加个性化、智能化和便捷的闹钟服务&#xff0c;帮助用户更有效地管理时间和起床。 二、系统组成 1. 微控制器 - 选用低功耗、高性能的微控制器&#xff0c;如 STM32 系列&#xff0c;负责整个系统的控制和数据…

QML —— 3种等待指示控件(附源码)

效果如下 说明 BusyIndicator应用于指示在加载内容或UI被阻止等待资源可用时的活动。BusyIndicator类似于一个不确定的ProgressBar。两者都可以用来指示背景活动。主要区别在于视觉效果,ProgressBar还可以显示具体的进度(当可以确定时)。由于视觉差异,繁忙指示器和不确定的…

Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)

链接 链接2 这两道题略微有点难&#xff0c;其中第一道题我自己解出来了&#xff0c;还补充了一个更好的解法&#xff0c;在空间上做了优化。 第二道题看了别人的题解&#xff0c;我正在努力理解。 题目一&#xff1a; 题意&#xff1a;为什么有n个元素&#xff0c;但是还有…

通过轻易云平台实现聚水潭数据高效集成到MySQL的技术方案

聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中&#xff0c;我们将详细探讨如何通过轻易云数据集成平台&#xff0c;将聚水潭的数据高效、可靠地集成到MySQL数据库中。具体方案为“聚水谭-店铺查询单-->BI斯莱蒙-店铺表”。这一过程不仅需要处理大量数据的快速写入…

华为云容器监控平台

首先搜索CCE,点击云容器引擎CCE 有不同的测试&#xff0c;生产&#xff0c;正式环境 工作负载--直接查询服务名看监控 数据库都是走的一个 Redis的查看

机器学习系列----关联分析

目录 1. 关联分析的基本概念 1.1定义 1.2常用算法 2.Apriori 算法的实现 2.1 工作原理 2.2 算法步骤 2.3 优缺点 2.4 时间复杂度 2.5实际运用----市场购物篮分析 3. FP-Growth 算法 3.1 工作原理 3.2 算法步骤 3.3 优缺点 3.4 时间复杂度 3.5实际运用——网页点…

前端面试vue篇:Vue2 和 Vue3 在设计和性能上有显著区别

Vue3 相对于 Vue2 的主要改进和性能提升体现在以下几个关键领域 1.响应式系统&#xff1a; (1)Vue2 使用 Object.defineProperty 遍历对象的所有属性来实现响应式&#xff0c;这在大型应用中可能导致性能瓶颈&#xff0c;尤其是在组件初次渲染和大量数据变化时。 (2)Vue3 引入了…

Cisco Catalyst 9800-40 Wireless Controller配置修改以及状态信息查看操作指引

1、查看AP的个性化信息、如IP地址、序列号、射频信息、信道信息、干扰等等AP信息 点击Monitoring---->AP Statistics---->找到想看的AP&#xff0c;点击进去查看 可以看得到IP地址、AP型号、POWER的状态、版本号、boot版本号、UP time时间和LED状态灯等等 继续往下拉可以…

k8s集群加入node节点为ubuntu 22.04

文章目录 1.环境准备1.1 关闭无用服务1.2 环境和网络1.3 apt源1.4 系统优化 2. 装containerd3. 接入k8s集群3.1 kubelet、kubeadm、kubectl安装3.2 缺少一个镜像3.3 接入k8s集群 4. 一些相关问题 1.环境准备 rootcto-gpu-pro-n01:~# lsb_release -a No LSB modules are availa…

低速接口项目之串口Uart开发(七)——如何在FPGA项目中实现自适应波特率串口功能

本节目录 一、自适应波特率串口 二、自适应波特率串口设计思路 三、自适应波特率串口测试验证 四、往期文章链接本节内容 一、自适应波特率串口 串口波特率Baud,具体定义此处不再进行描述&#xff0c;常用的波特率数值有115200、57600、38400、19200、9600等&#xff0c;FPG…

JS中的正则表达式简要梳理

文章目录 一、结构1、匹配模式2、字符组3、量词4、贪婪匹配和惰性匹配5、多选分支6、匹配模式关键词 二、位置1、位置锚点 三、括号分组1、分组2、分支结构3、引用分组4、括号嵌套 四、回溯模式1、回溯匹配 正则表达式&#xff08;Regular Expression&#xff09;‌是一种强大的…

【风水】-- 买车和用车的风水知识

目录 一、阴阳与车的风水 1. 车的属性&#xff1a;阴阳平衡 2. 车主与车的阴阳互补 二、五行与车的风水 1. 车的颜色与五行 2. 车主的五行与车的五行匹配 3. 五行相生相克的应用 三、八卦与车的风水 1. 车位选择与八卦方位 2. 车内布置与八卦 四、总结 结合阴阳、五…

深度剖析Linux进程控制

文章目录 &#x1f355;前言&#x1f95d;进程创建fork 函数fork函数返回值写时拷贝fork 使用场景fork调用失败的原因 &#x1f965;进程终止进程退出码进程正常退出return 退出exit 函数_exit 函数return VS exit VS _exit 进程异常退出 &#x1f347;进程等待进程等待的必要性…

网络安全,文明上网(6)网安相关法律

列举 1. 《中华人民共和国网络安全法》&#xff1a; - 这是中国网络安全的基本法律&#xff0c;于2017年6月1日开始实施。该法律明确了网络运营者的安全保护义务&#xff0c;包括采取数据分类、重要数据备份和加密等措施。 2. 《中华人民共和国数据安全法》&#xff1a; …

IDEA2023 SpringBoot整合MyBatis(三)

一、数据库表 CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,gender ENUM(Male, Female, Other),email VARCHAR(100) UNIQUE,phone_number VARCHAR(20),address VARCHAR(255),date_of_birth DATE,enrollment_date DATE,cours…

【Vue】 npm install amap-js-api-loader指南

前言 项目中的地图模块突然打不开了 正文 版本太低了&#xff0c;而且Vue项目就应该正经走项目流程啊喂&#xff01; npm i amap/amap-jsapi-loader --save 官方说这样执行完&#xff0c;就这结束啦&#xff01;它结束了&#xff0c;我还没有&#xff0c;不然不可能记录这篇文…