【操作系统】了解Linux操作系统中PCB进程管理模块与进程PID

news2024/11/23 10:24:48

本篇要分享的内容是有关于操作系统中进程的内容。

目录

1.进程的简单理解

2.了解task_struct(进程控制模块)内容分类

3.task_struct(进程控制模块)中的PID

4.调用查看PID的函数


1.进程的简单理解

首先我们需要理解的是什么是程序、什么是进程。

简单理解进程就是可执行程序+内核数据结构(PCB);

这里的PCB所指的就是process control block(进程控制模块),也可以称作为task_struct,也就是们运行中的程序所对应的各种信息都会被存放在PCB中。

我们先从最简单的部分开始理解,在我们平时写完代码时,将代码运行起来时会在我们的磁盘上生成.exe文件,同时生成窗口,我们可以随便运行一些程序再打开我们的任务管理器,就可以看到这些进程的信息

我们都直到操作系统是帮助我们管理进程、文件、内存、设备等等方便于我们能更好的和我们的计算机交互,那么接下来我们深入研究操作系统如何对进程管理和组织。

2.了解task_struct(进程控制模块)内容分类

task_struct是Linux下的进程管理模块,我们需要了解一下它的内容

1.标示符: 描述本进程的唯一标示符,用来区别其他进程。
2.状态: 任务状态,退出代码,退出信号等。
3.优先级: 相对于其他进程的优先级。
4.程序计数器: 程序中即将被执行的下一条指令的地址。
5.内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
6.上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
7.I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
8.记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
...其他信息

这些信息我们可以对比windows系统下的PCB查看

但是因为windows操作系统的设置当前我们只能看到进程任务的名称 。

3.task_struct(进程控制模块)中的PID

首先需要理解的一个概念是进程所对应的标识符又叫做 PID (process id),他是描述本进程的唯一标示符,用来区别其他进程。

由于一些原因我们无法在Windows系统中查看进程的PID,所以需要打开我们的Linux操作系统;

那么本章要分享的内容与进程有关

所以在命令行中输入ps axj,即可查看Linux系统中的进程

 

那这一行就是进程所对应的属性的信息,其中就有我们上面提到过的PID,所以我们这里关注PID。

在文章开始时我们简单对进程有过了解,就是将我们敲的代码通过操作系统运行起来就是一个进程,那我们不妨写一个简单的代码让他跑起来;

 如上时一个循环打印;将他运行起来

可以看到他已经循环打印

接下里我们复制再我们的操作台用来查看刚刚运行起来的进程

这里使用  ps axj | grep 运行起来的文件名

可以看到再使用查看进程的命令后出现了两行我们并不懂的信息,我们一一对其解释。 

同时还要介绍另一个命令

ps axj | head -1

这个指令可以查看我们的标头的信息;

所以我们不妨将这两个命令一起使用,就可以看到标头信息和它对应的数值

 

可以看到我们运行起来的程序,也就是进程的PID就是821311

那在下面PID为821630的进程又是什么呢?其实当我们使用指令查进程时,查进程本身的动作也会变成进程,我要去追你,我自己也要动起来,所以在查进程时会将自己也查出来。

下面我们将右边的进程,也就是循环打印终止,再输入查进程的命令

 可以看到结果查找不出刚刚的进程了。

所以根据以上结论我们就可以得出结论:我们所写的所有指令,软件,程序最终都是进程。

那么在Windows操作系统下更容易看到

比如这里打开微信

 可以看到任务管理器中就有了微信的进程,自然结束进程后相对应的进程也会被终止。

4.调用查看PID的函数

当然除了上述方法可以看到进程的PID之外,还可以通过函数来查看PID;

我们在Linux中查看PID的使用手册

简单理解这个手册中所说的用法就是

调用PID可以可以使用

getpid()

可以将它理解为一个函数,它的作用就是获取进程的标识符,返回值是PID(在此意为哪个进程调用了它,就返回哪个进程的PID),那么头文件<sys/types.h>就告诉着我们这是一个有关于系统的函数和头文件。

在代码中使用

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
        int i=0;
        while(i<=100){
                pid_t id=getpid();
                printf("这是一个进程,PID为:%d\n",id);
                sleep(1);
        }
}
~        

将其运行起来

这个进程会一直调用函数获取PID;

那直到了PID之后我们就可以使用PID方便对其管理 ,比如我们需要结束一个进程

kill -9 PID

简单使用

可以看到我们使用kill -9  加上PID命令时就可以结束PID对应的当前的进程 ;

就像Windows操作系统中在任务管理器中结束进程,在手机上杀后台。

以上就是有关PCB的简单理解和对PID简单的理解和使用,如果对你有所帮助,还请多多三连支持,感谢您的阅读。

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

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

相关文章

简单讲解 glm::mat4

文章目录 前言一、下载glm库二、基本数学知识1. 三维中的 4 x 4 矩阵2.旋转3. 位移4. 缩放5. 组合 三、行向量或列向量四、总结 前言 glm库是OpenGL的官方数学库&#xff0c;里面内置多种跟几何变换相关的函数&#xff0c;熟练掌握glm库可以省下很多麻烦。 因为最近在项目中主…

鞋类 整鞋试验方法 剥离强度

声明 本文是学习GB-T 3903.3-2011 鞋类 整鞋试验方法 剥离强度. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 GB/T 3903 的本部分规定了整鞋鞋底与鞋帮或外底与外中底之间剥离强度的试验方法。 本部分适用于采用模压、硫化、注塑、灌注、胶…

暴力破解及验证码安全

1.暴力破解注意事项 1、破解前一定要有一个有郊的字典&#xff08;Top100 TOP2000 csdn QQ 163等密码&#xff09; https://www.bugku.com/mima/ 密码生成器 2、判断用户是否设置了复杂的密码 在注册页面注册一个,用简单密码看是否可以注册成功 3、网站是…

Jenkins集成AppScan实现

一、Jenkins上安装插件 在Jenkins里安装以下插件 ibm-security-appscanstandard-scanner 二、打开AppScan 1、配置需要扫描的地址 配置需要扫描的地址 2、记录好要扫描的URL登录序列 记录好要扫描的URL登录序列 3、导出要扫描的URL登录序列设置 导出要扫描的URL登录序列设置 三…

C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强

前言&#xff1a;在第三章我们介绍了顺序结构程序设计。在顺序结构中&#xff0c;各个语句是按自上而下的顺序执行的&#xff0c;执行完上一个语句就自动执行下一个语句&#xff0c;是无条件的&#xff0c;不必做任何判断。是这最简单的程序结构。实际上&#xff0c;在很多情况…

IDEA 配置 Maven(解决依赖下载缓慢)

IDEA 配置 Maven&#xff08;解决依赖下载缓慢&#xff09; 这一篇主要介绍 Maven 的基本用法。等我之后学习到框架知识时&#xff0c;会完善此部分内容。 一、Maven 简介 Maven 是专门用于管理和构建 Java 项目的工具&#xff0c;Apache Maven 是一个项目管理和构建工具&#…

ali内核服务器搭建Linux版本的小皮面板(微调)

一、搭建小皮面板 windows版本的小皮面板我们经常使用,早就熟悉了搭建和配置 那么这里我们就来使用Linux版本的小皮面板,看看如何进行操作 安装网址: https://www.xp.cn/linux.html 这里根据自己的操作系统选择合适的命令 我使用的是kali搭建,因此选择Debian安装脚本 注意:…

28270-2012 智能型阀门电动装置 学习笔记

声明 本文是学习GB-T 28270-2012 智能型阀门电动装置. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了智能型阀门电动装置(以下简称智能电装)的术语、技术要求、试验方法、检验规则、标 志、包装、运输和贮存条件等。 本标准适…

24Hibench

1. Hibench 官网 ​ HiBench is a big data benchmark suite that helps evaluate different big data frameworks in terms of speed, throughput and system resource utilizations. It contains a set of Hadoop, Spark and streaming workloads, including Sort, WordCou…

国庆放假作业2

1、select实现服务器并发 #include <myhead.h>#define PORT 7373 #define IP "192.168.1.9"int main(int argc,const char *argv[]) {//创建报式套接字int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd<0){ERR_MSG("socket error");return -1;}prin…

MATLAB与Python:优势与挑战

本文旨在探讨MATLAB与Python在特定领域内的使用情况&#xff0c;并分析两者之间的优势和挑战。 MATLAB和Python都是流行的编程语言&#xff0c;广泛应用于科学计算、数据分析和机器学习等领域。在某些领域&#xff0c;如航空航天工程、自动化和电子工程嵌入式系统开发等&#…

【分布式事务】

文章目录 解决分布式事务的思路seata四种模式1. XA模式2. AT模式AT模式与XA模式的区别是什么&#xff1f;脏写问题 3. TCC模式事务悬挂和空回滚 4. SAGA模式 四种模式对比口述AT模式与TCC模式高可用 什么是分布式事务&#xff1f; 分布式事务&#xff0c;就是指不是在单个服务或…

Arduino ESP32/ESP8266 +ST7735 1.8“tft中秋小时钟

Arduino ESP32 ST7735 1.8"tft中秋小时钟 &#x1f33c;原作者B站视频&#xff1a; ESP32中秋小时钟&#xff0c;表盘自动切换&#xff0c;代码开源&#xff0c;原图可下载&#xff08;案例应用&#xff09; &#x1f39e;tft ST7735 128160 1.8" 显示效果:(由于原作…

【vue3】wacth监听,监听ref定义的数据,监听reactive定义的数据,详解踩坑点

假期第二篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 之前已经记录了一篇【vue3基础知识点-computed和watch】 今天在学习的过程中发现&#xff0c;之前记录的这一篇果然是很基础的&#xff0c;很多东西都讲的不够…

gcc中-I(大写的i)参数的作用

《gcc -I -L -l区别》是我参考的一篇博客。 gcc中-I参数可以帮助找到头文件的目录&#xff0c;比如在当前目录下有一个名为includeTestCom.c的c文件和名为includeCom的目录。 includeTestCom.c里边的内容如下&#xff1a; #include "good.h" int main(){printf(&q…

自己动手写编译器:实现命令行模块

在前面一系列章节中&#xff0c;我们完成了词法解析的各种算法。包括解析正则表达式字符串&#xff0c;构建 NFA 状态就&#xff0c;从 NFA 转换为 DFA 状态机&#xff0c;最后实现状态机最小化&#xff0c;接下来我们注重词法解析模块的工程化实现&#xff0c;也就是我们将所有…

CCF-CSP真题《202309-1 坐标变换(其一)》思路+python,c++,java满分题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202309-1试题名称&#xff1a;坐标变换&#xff08;其一&#xff09;时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题描述 对于平面直角坐标…

11链表-迭代与递归

目录 LeetCode之路——206. 反转链表 分析&#xff1a; 解法一&#xff1a;迭代 解法二&#xff1a;递归 LeetCode之路——206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head […

git你学“废”了吗?——git撤销操作指令详解

git你学“废”了吗&#xff1f;——git撤销操作指令详解&#x1f60e; 前言&#x1f64c;撤销的本质撤销修改情况一&#xff1a;撤销工作区的修改方式一&#xff1a;方式二&#xff1a;演示截图&#xff1a; 撤销修改情况二&#xff1a;撤销暂存区和工作区的修改操作截图&#…

【Java 进阶篇】JDBC DriverManager 详解

JDBC&#xff08;Java Database Connectivity&#xff09;是 Java 标准库中用于与数据库进行交互的 API。它允许 Java 应用程序连接到各种不同的数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;执行 SQL 查询和更新操作&#xff0c;以及处理数据库事务。在 JDBC 中&am…