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

news2024/11/15 21:01:33

🌷相关专栏:《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


💗感谢阅读!💗


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

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

相关文章

sqli-labs靶场通关攻略(41-60)

第四十一关 联合查询爆出数据库 但这关考察的时堆叠注入 ,我们给他注入一条数据 输入id50即可查到我们注入的数据 第四十二关 看页面似曾相识,上次我们是用注册新用户然后对其他账户进行登录从而造成注入,但这次不能注册新用户了 存在堆叠注…

leetcode 1645 Hopper公司查询2(postgresql)

需求 表: Drivers -------------------- | Column Name | Type | -------------------- | driver_id | int | | join_date | date | -------------------- driver_id是该表的主键。 该表的每一行均包含驾驶员的ID以及他们加入Hopper公司的日期。 表: Rides ---------------…

【JAVA入门】Day27 - 单列集合体系结构综述

【JAVA入门】Day27 - 单列集合体系结构 文章目录 【JAVA入门】Day27 - 单列集合体系结构1.1 Collection 集合的基本方法1.2 Collection 集合的遍历方式1.2.1 迭代器遍历1.2.2 增强 for 遍历1.2.3 利用 Lambda 表达式进行遍历 1.3 List 集合的基本方法1.4 List 集合的遍历方式 J…

云手机怎样简化海外社媒平台运营

随着越来越多的卖家希望拓展海外市场,运营TikTok、Facebook等社交媒体平台已经成为吸引流量和促进销售的重要手段。然而,在管理海外社媒账号的过程中,许多人会面临网络连接的问题。这时,使用一款高效便捷的云手机工具就显得尤为便…

企业财税自动化解决方案案例分享与经验总结

数字经济时代,企业在财税管理方面面临着越来越多的挑战,作为企业运营的核心部分,其效率和准确性直接关系到企业的财务健康和决策效率。为全面提升财务管理工作的效率和质量,推动业财融合,许多企业开始探索,…

ML17_变分推断01:KL散度、ELBO

1. KL散度 KL散度(Kullback-Leibler divergence),也称为相对熵(relative entropy),是由Solomon Kullback和Richard Leibler在1951年引入的一种衡量两个概率分布之间差异的方法。KL散度不是一种距离度量&am…

Flutter的升级和降级步骤

升级 1.版本升级 // 升级到指定版本 flutter upgrade 版本号 // 升级到最新版本 flutter upgrade 2. 更新开发配置 启动 Android Studio。 打开 Settings 对话框,查看 SDK Manager。 如果你已经打开了一个项目,请打开 Tools > SDK Manager。 如果…

设置Virtualbox虚拟机共享文件夹

由于工作环境的原因,选择Virtualbox的方式安装虚拟操作系统,常用的操作系统为ubuntu,不知道道友是否也曾遇到这样的问题,就是虚拟机和主机进行文件拖拽的时候,会因为手抖造成拖拽失败,虚拟机界面显示大个的…

CCSI: 用于无数据类别增量学习的持续类别特定印象|文献速递--基于深度学习的医学影像病灶分割

Title 题目 CCSI: Continual Class-Specific Impression for data-free class incremental learning CCSI: 用于无数据类别增量学习的持续类别特定印象 01 文献速递介绍 当前用于医学图像分类任务的深度学习模型表现出了令人鼓舞的性能。然而,这些模型大多要求…

python 怎样计算字符串的长度

python 计算字符串长度,一个中文算两个字符,先转换成utf8,然后通过计算utf8的长度和len函数取得的长度,进行对比即可知道字符串内中文字符的数量,自然就可以计算出字符串的长度了。 valueu脚本12 length len(value) u…

电车买不了保险?就该车企负责

文 | AUTO芯球 作者 | 雷慢 买电车的真是太糟心了, 来看这个车主,去年保费4200,今年保险公司拒保了, 车主说要投诉,保险公司就扔过来一张1万5的报价单。 你不是要保险吗,买吧! 我告诉你们&…

安装破解激活pycharm

装pycharm之前先装python 激活方式版本不能过新,要22年1月及其之前的版本,下拉找到对应版本的专业版 Other Versions - PyCharmGet past releases and previous versions of PyCharm.https://www.jetbrains.com/pycharm/download/other.html 2.下载电脑…

【支付】PayPal支付通道 Java对接 (下单 付款 确认 退款 查询 回调)

使用Java 对接 PayPal 接口,从下单,支付,确认订单、查询、退款、退款查询、回调处理等全流程代码示例,以及图文说明。 PayPal接口调用时序图 #mermaid-svg-WARCfGOa6JcsCAch {font-family:"trebuchet ms",verdana,aria…

深度学习的发展历程

深度学习的起源 在机器学习中,我们经常使用两种方式来表示特征:局部表示(Local Representation)和分布式表示(Distributed Representation)。以颜色表示为例,见下图: 要学习到一种好…

探索NVIDIA RTX 4060 8G与RTX 3060 12G:性能与适用场景的深度解析

在考虑NVIDIA RTX 4060 8G和RTX 3060 12G两种配置时,我们需要根据具体的应用场景来做出选择。RTX 4060 8G显卡以其较快的处理速度而著称,适合需要快速响应的任务,如实时渲染、视频编辑和部分机器学习任务。而RTX 3060 12G显卡则因其较大的显存…

依托自研力量,给共享集群存储服务一个优选

YashanDB共享集群有三大关键组件,崖山集群服务(YCS)、崖山集群文件系统(YFS)、DB组件。上一篇共享集群系列文章《为何共享集群的高可用能力被频频称赞,它的机制有何不同?》深入解析了关键组件的…

第九届“创客中国”生成式人工智能中小企业创新创业大赛复赛圆满落幕

9月3日,第九届“创客中国”生成式人工智能(AIGC)中小企业创新创业大赛复赛在南昌高新区艾溪湖畔圆满落幕,共有11组企业项目和10组创客项目凭借其卓越的项目展示、深刻的市场洞察以及前瞻的技术应用,脱颖而出,成功晋级至激动人心的决赛阶段。 本次大赛由工业和信息化信息中心主办…

多池化策略揭秘:PVAFN如何实现更精准的3D物体识别?

更多优质内容,请关注公众号:智驾机器人技术前线 1.论文信息 论文标题:PVAFN: Point-Voxel Attention Fusion Network with Multi-Pooling Enhancing for 3D Object Detection 作者:Yidi Li, Jiahao Wen, Bin Ren, Wenhao Li, Zh…

传统CV算法——基于Sift算法实现特征点检测

图像尺度空间 在一定的范围内,无论物体是大还是小,人眼都可以分辨出来,然而计算机要有相同的能力却很难,所以要让机器能够对物体在不同尺度下有一个统一的认知,就需要考虑图像在不同的尺度下都存在的特点。 尺度空间的…

【练习5】简写单词

地址:简写单词_牛客题霸_牛客网 (nowcoder.com) 分析: 1.用到in.charAt(i)方法,可以实现读取下一个由空白字符分隔的输入字符串,并返回这个字符串的第一个字符。 2.ch-32可以实现小写字母转大写字母。 public static void main(St…