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

【Linux】进程周边:进程概念


🌷相关专栏:《c++学习》《Linux进阶之路》🌷


全片内容总览:

目录

1.进程基本概念

2.进程的本质?为什么要有进程控制块PCB?

1)为什么要有进程控制块PCB?

2)进程的本质

3) Linux系统下的PCB:task_struct

概念

task_struct的内容

3.怎么使用进程

1)查看进程

🔥利用系统目录查看

🔥利用“用户级”工具获取进程信息

⁉️grep引发的问题

⁉️进程是有生命周期的

 2)杀掉进程

ctrl+c终止进程

kill + 进程PID

💗感谢阅读!💗


1.进程基本概念

较为官方的说法:

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

辅助理解:
对代码进行编译链接产生的文件我们称之为可执行程序(.exe),执行该程序,该程序会被加载到内存中,此时便称之为进程

2.进程的本质?为什么要有进程控制块PCB

1)为什么要有进程控制块PCB

因为操作系统要利用进程控制块PCB,对进入内存的可执行程序进行管理。
 

对于我们常用的电脑来说,可以同时执行多个可执行程序。

他们都要进入内存,因此属于软硬件资源的一种,归属操作系统进行管理

操作系统进行管理的原则就是:先描述,再组织。
 

因此,我们将进程的相关信息描述起来,描述得到的就是进程控制块PCB(process control block)。

每个进程都有着与之对应的进程控制块PCB,各不相同。

那么进程的本质:进程=PCB(内核数据结构)+可执行程序 


 

那么对于进程的管理,就可以转换为对进程控制块PCB的管理。

我们将进程控制块PCB,组织起来,构成特定的数据结构。

操作系统的管理进程对象的转换:

        对进程的直接管理 --->  对PCB对象的管理 ---> 对PCB有关的某种数据结构的管理

2)进程的本质

进程 = 内核PCB对象 +可执行程序
         =内核数据结构 +可执行程序

 

  • 所有对进程的控制和操作,都只和进程的PCB有关,和进程的可执行程序没有关系。
  • 一旦有需求,可以把PCB(Node节点)放到任意数据结构中去。

举例:

cpu如果想要执行a.exe、b.exe,只需要调用他们对应的PCB(pcb_a,pcb_b)。

即将被cpu执行的PCB会构成对应的数据结构,等待被cpu执行。

总结:

CPU在进行进程调度的时候, 本质进程排队,其实就是让进程的PCB去排队,而不是可执行程序去排队,CPU找到了对应CPB,就找到了可执行程序,包括它的属性信息。

3) Linux系统下的PCB:task_struct

概念

课本上是:进程控制块PCB(process control block),PCB是操作系统学科的总称。
 

Linux操作系统下的PCB具体名称是: task_struct
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。

task_struct的内容

  • 标示符(PID): 描述本进程的唯一标示符,用来区别其他进程(每次启动都会变化)。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器(pc): 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
  • 上下文数据: 进程执行时处理器的寄存器中的数据。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟总和,时间限制,记账号等。
  • 其他信息。

3.怎么使用进程

1)查看进程

🔥利用系统目录查看

根目录下的proc目录,/proc 下存储着进程信息。

 查看所有进行目录文件:

ls /proc

目录名是数字的,就是每个进程对应得目录,存储着所有进程信息。

数字是进程得标识符PID,每个进程得PID是唯一的。

让我们尝试查看一个进程的信息,

ls 84350

🔥利用“用户级”工具获取进程信息

以下两个指令都可以。

ps ajx //查看所有系统进程的基本信息
ps aux //查看所有系统进程的基本信息

可以结合head、grep 来查找具体的某个进程。


head  显示进程的属性行,方便确定进程的PID,以及父进程的PID。

ps ajx | head -1

greap 查找具体某个进程

ps ajx | head -1 && ps ajx | grep a.out

⁉️grep引发的问题

在前文,我们利用  ps ajx | head -1 && ps ajx | grep a.out ,查找到了a.out 这个进程,

但是还出现一个特殊的grep进程??

这是因为,我们利用grep 查找a.out的时候,grep指令因此也在执行,grep也属于进程,并且包含了a.out的信息。

可以看出,所有独立的指令,背后都是写好的程序,一旦运行起来,它们也是进程。

想要去除grep这个进程的办法:

使用 -v选项,反向搜索的意思,即过滤掉包含有grep内容的信息。  

ps ajx | head -1 && ps ajx | grep test | grep -v grep

⁉️进程是有生命周期的
 

进程的创建和销毁

我们可以看到,一开始并没有PID为84647的进程,直到程序被执行,才查询到对应的进程信息。

一旦结束可执行程序,对应PID为84647的进程也被销毁。

while :; do ps ajx | head -1 && ps ajx | grep  a.out | grep -v grep; sleep 1;done

随着进程的销毁,它对应的PID也会消失。
 

因为进程是有生命的。

所以每次启动同一个可执行程序,但是产生的进程的PID也会变化。

每次都是一个新进程!

如下图:

 2)杀掉进程

ctrl+c终止进程

使用的效果,如下图:

kill + 进程PID


💗感谢阅读!💗


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 给已有的.so库重新封装一个新的库,并能使用新旧库中的函数
  • Java Socket tcp udp 使用
  • Android 13 aosp 恢复出厂设置流程
  • 【MySQL】Ubuntu22.04安装MySQL8.0.39及修改默认用户名和密码
  • 如何操作可以有效的防止其他人修改Excel文件?
  • 《JavaEE进阶》----6.<SpringMVC实践项目:【简易两整数加法计算器】>
  • 【重学 MySQL】一、数据库概述
  • 深入理解 PyQt5:Python GUI 开发详解
  • GIS十大经典问题之1.缓冲区分析问题
  • 显式链接和隐式链接
  • 数据管理能力成熟度评估模型DCMM
  • Python3.8绿色便携版安装版制作
  • Opencv中的直方图(3)直方图比较函数compareHist()的使用
  • avi转换成mp4,这6种方法助你快速转换
  • vue3中如何拿到element plus中el-tree多选的值?
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • AHK 中 = 和 == 等比较运算符的用法
  • Fabric架构演变之路
  • go语言学习初探(一)
  • Java程序员幽默爆笑锦集
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Lsb图片隐写
  • mockjs让前端开发独立于后端
  • mongo索引构建
  • MySQL数据库运维之数据恢复
  • Netty 4.1 源代码学习:线程模型
  • Redis 懒删除(lazy free)简史
  • Redis学习笔记 - pipline(流水线、管道)
  • socket.io+express实现聊天室的思考(三)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 闭包,sync使用细节
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 基于webpack 的 vue 多页架构
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端临床手札——文件上传
  • 微服务入门【系列视频课程】
  • 移动端唤起键盘时取消position:fixed定位
  • mysql面试题分组并合并列
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 大数据全解:定义、价值及挑战
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • !!Dom4j 学习笔记
  • #HarmonyOS:Web组件的使用
  • #Linux(Source Insight安装及工程建立)
  • #php的pecl工具#
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)计算机毕业设计大学生兼职系统
  • (理论篇)httpmoudle和httphandler一览
  • (七)c52学习之旅-中断
  • (算法)求1到1亿间的质数或素数
  • (幽默漫画)有个程序员老公,是怎样的体验?