Linux进程——进程的概念(PCB的理解)

embedded/2024/10/18 23:20:39/

前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。

Linux进程学习基础


在这里插入图片描述


本篇主要内容:

  • 进程的概念
  • 通过系统调用获取进程标示符

在这里插入图片描述

Linux进程

  • 1. 进程的概念
    • 1.1 描述进程-PCB
    • 1.2 CPU对于进程列表的处理
  • 2. 通过系统调用获取进程标示符
    • 2.1 查看进程信息
    • 2.2 终止进程
    • 2.3 系统调用函数:getpid
    • 2.4 父进程和子进程
  • 3. 总结


1. 进程的概念

在学习进程之前,大家对进程肯定初步的了解,那么今天我们来深入了解一下

基本概念:

  • 课本概念:程序的一个执行实例,正在执行的程序等
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。

1.1 描述进程-PCB

在上一篇中,我们提到了:
管理的本质不是管理个体,而是管理个体的数据!

而操作系统管理进程也是如此,管理的进程对应的数据

在这里插入图片描述
而在操作系统对进程上,依然采用的是“先描述,再组织”的方法

在这里插入图片描述

操作系统将可执行程序的各种数据加载,拷贝出来,再用结构体把数据存进去,由于可能同时会存在多个进程,所以操作系统使用链表或其他数据结构将它们链接在一起!

而这个又操作系统产生控制进程的结构就是PCB

PCB:

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是:
    task_struct

1.2 CPU对于进程列表的处理

在CPU对进程列表进行处理时,PCB中的数据有时不会被CPU立刻处理,因此他会进入进程队列,排队等待处理
在这里插入图片描述
操作系统内由于进程的控制十分复杂,一个PCB可能链接到多个数据结构上。

在这里插入图片描述

因此: 进程=可执行程序 + 内核数据结构(PCB)


2. 通过系统调用获取进程标示符

2.1 查看进程信息

每一个进程都有自己对应的标识符当我们想查看进程的信息:

指令:ps ajx

在这里插入图片描述
这样做的话我们查看的是所有进程,这里我们就要用到之前的学过的指令了。

现在我们来写一个程序来观察他的进程状态 在这里插入图片描述
写死循环方便我们更好观察,运行程序我们再打开一个窗口,搜索程序的进程:

指令:ps ajx | grep mytest

在这里插入图片描述

此时,为什么会出现两个进程呢?

  • 因为在grep指令发挥作用时,也会形成一个mytest文件

我们直接查看进程并不能知道每个数据表达的意思,所以我们可以加上:

指令:ps ajx | head -1

在这里插入图片描述
来查看每一行的信息

指令:ps ajx | head -1 && ps ajx | grep 可执行程序
在这里插入图片描述


2.2 终止进程

在我们刚接触Linux时,通常按CTRL+c可以结束进程,现在在学习Linux进程时,还有一种方法可以杀死进程:

指令:kill -9 进程id

注意:这里的-9是信号参数,后面会提到,现在直接使用即可

在这里插入图片描述
使用指令能直接杀死进程

以上说明我们所有运行的指令,软件,自己写的可执行程序都是进程!


2.3 系统调用函数:getpid

每次查看进程使用如果都要使用ps查看这样的话很浪费时间且繁琐,因此我们可以使用即将学习到的第一个系统调用函数:

函数:getpid

我们先来简单了解一下 getpid

在这里插入图片描述
在这里插入图片描述
用系统调用函数查看PID


2.4 父进程和子进程

在使用ps指令查看进程信息时,除了PID我们可以看见左边还有一个PPID,当我们不断地启动结束进程时,PID每一次的数据都不一样,但是PPID却不会改变。而这PPID就是父进程

在这里插入图片描述
我们依然可以用函数来查看父进程:

函数:getppid

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因此我们可以知道这两个函数:
在这里插入图片描述

当我们不断地启动结束进程时,PID每一次的数据都不一样,但是PPID却不会改变,让我们来查看一下父进程信息

在这里插入图片描述
如果我们直接杀死父进程bash,那么我们的shell会直接挂掉


3. 总结

本篇主要学习的是进程的概念,CPU如何对PCB进行处理,以及初步学习如何查看父进程与子进程,希望大家能理解好PCB,下篇我们将深入了解进程的创建!

谢谢大家支持本篇到这里就结束了

在这里插入图片描述


http://www.ppmy.cn/embedded/23970.html

相关文章

Arch Linux安装macOS

安装需要的包 sudo pacman -S qemu-full libvirt virt-manager p7zip yay -S dmg2img安装步骤 cd ~ git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.git cd OSX-KVM # 选择iOS版本 ./fetch-macOS.py #将上一步下载的BaseSystem.dmg转换格式 dmg2img -…

jadx反编译apk

ref:https://github.com/skylot/jadx jadx是一款反编译利器,同时支持命令行和图形界面,能以最简便的方式完成apk的反编译操作。 安装: 1.windos: https://github.com/skylot/jadx/releases/tag/v1.2.0 下载jadx-1.…

如何一键清除文件目录下所有的node_modules

如何一键清除文件目录下所有的node_modules 快速删除目录下的node_modules,下面附上windows和mac的脚本指令 windows脚本 FOR /d /r . %d in (node_modules) DO IF EXIST "%d" rm -rf "%d"mac脚本 find . -name "node_modules" -…

leetcode1146--快照数组

1. 题意 对一个数组进行多次修改,然后照一个快照。 再对数组进行询问第k次快照时的index处的值。 2. 题解 哈希表 二分 对于每个位置,我们只需要顺序记录这个位置更改的快照和时间和值即可; 再通过二分查找来获取它的值。 我的代码 cl…

sklearn混淆矩阵的计算和seaborn可视化

为了计算语义分割的指标miou,需要生成的中间过程就是混淆矩阵。 iou intersection / union 每个类别的平均iou就是mean iou。 使用sklearn自带的confusion_matrix能很容易生成混淆矩阵,可以进行混淆矩阵的可视化观察哪个类别分割的不好。 from skle…

【STM32+HAL】SDIO模式读写SD卡

一、准备工作 有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32HAL】CUBEMX初始化配置 二、所用工具 1、芯片: STM32F407ZGT6 2、IDE: MDK-Keil软件 3、库文件:STM32F4xxHAL库 三、实现功能 实现用DMA读写SD卡内…

Vue面试经验

Vue部分 Vue编译时声明周期的执行顺序 Vue中父子组件渲染顺序(同步引入子组件:import Son from ‘/components/son’ ) 父子组件编译时的生命周期执行顺序 这里修改data数据时也修改了dom,如过知识通过按钮对数据进行操作&…

android 内部保存数据

在Android中,内部序列化对象通常指的是将对象的状态转换为字节流,以便可以将对象保存到文件、通过网络发送,或者在应用的不同部分之间传递。在Java中,序列化是通过实现java.io.Serializable接口来完成的。Android继承了Java的序列…