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

news2024/11/24 3:15:18

前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了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.coloradmin.cn/o/1633309.html

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

相关文章

关于配置nginx 代理去掉location 匹配的上下文规则

事情是这样的,有个需求,就是在本系统准备把所有的api 请求放到webman 框架 然后把后台的业务依然保留在fastadmin 框架, 打算加一个反向代理,用同一个域名的加上一个访问后缀,放到到webman 服务,也就是本…

mathtype中如何输入指示函数花体的 I

mathtype中如何输入花体的 I 问题描述解决办法 问题描述 写word文档时,借助mathtype敲公式,指示函数的花体I如何键入。 解决办法 1.编辑->插入符号 2.选择“Euclid Math Two”,里面有花体的各种字母。 3.成功。

新一代状态空间模型网络替代Transformer 综述

本文首先初步介绍了状态空间模型(SSM)的工作原理。然后,从多个方面回顾SSM的相关工作,包括SSM的起源和变化、自然语言处理、计算机视觉、图、多模态处理、多模态和多媒体、点云/事件流数据、时间序列数据等领域的相关工作。 此外…

vue3.0(三) Vite文件目录结构及SFC语法

文章目录 Vite介绍Vite文件目录结构SFC语法SFC 语法定义bug解决 Vite介绍 为什么使用Vite? 表现 与Vite的ESbuild预绑定使其比使用任何其他JS绑定器都快10到100倍。这是因为它有助于提高页面速度并将CommonJS/UMD模块转换为ESM。 基于Vite文件,“预绑定…

RabbitMQ中的交换机类型

交换机类型 可以看到,在订阅模型中,多了一个exchange角色,而且过程略有变化: Publisher:生产者,不再发送消息到队列中,而是发给交换机 Exchange:交换机,一方面&#xff…

【Linux】dlopen: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘ not found

[30116] Error loading Python lib /tmp/_MEIlvdUu6/libpython3.8.so.1.0: dlopen: /lib/x86_64-linux-gnu/libm.so.6: version GLIBC_2.29 not found (required by /tmp/_MEIlvdUu6/libpython3.8.so.1.0)1 cd到指定路径 cd /usr/local 2 下载 wget http://ftp.gnu.org/gnu/gl…

[NSSRound#23 misc] 前两题

这个周末NSS个人赛是个MISC,这个好久没怎么玩了,结果不会了。只作出一题来,不过参与的人比较少,每题解出数和也不到50。前50吧:) 画师 给了一个xml文件,看内容有 mxGraphModel 标签,应该是某个东西画的矢…

Qt Designer入门

安装 PyQt5提供了一个可视化图形工具Qt Designer,文件名为designer.exe。如果在电脑上找不到,可以用如下命令进行安装: pip install PyQt5-tools 安装完毕后,可在如下目录找到此工具软件: D:\Python3.9\Lib\site-pa…

【多态】有关多继承和菱形继承的多态

博主首页: 有趣的中国人 专栏首页: C进阶 其它专栏: C初阶 | 初阶数据结构 | Linux 博主会持续更新 本篇文章主要讲解 多继承和菱形继承的多态 的相关内容 文章目录 1. 回顾多态底层2. 抽象类2.1 概念2.2 接口继承和实现继承 3. 虚表所在…

运维的利器–监控–zabbix–第二步:建设–部署zabbix agent--windows server系统--agent客户端安装部署

第一步:下载windows agent软件 第一点:zabbix官网针对linux和window系统有两种不同的安装方式,其中:windows为tar压缩包,根据你zabbix server安装的版本,在官网下载同样版本的agent软件。 amd64&#xff…

Eclipse:-Dmaven.multiModuleProjectDirectory system propery is not set.

eclipse中使用maven插件的时候,运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match. 可以设一个环境变量M2_HOME指向你的maven安装目录 M2_HOMED:\Apps\…

vcruntime140_1.dll无法继续执行代码怎么办,分享5种解决方法

在日常使用电脑进行各项任务操作时,用户可能会遇到一个令人困扰的问题:当尝试运行某款软件以推进工作或享受娱乐时,系统突然弹出错误提示,明确指出“由于找不到vcruntime140_1.dll,无法继续执行代码”。。这个问题可能…

城市公交查询系统的设计与实现(四)

目录 4 系统概要设计 4.1 概要设计的概论 4.2 架构设计 4.3 系统功能结构图及分析 4.3.1 系统功能结构图 4.3.2 系统基本功能 1.站点查询 2.公交线路查询 3.站—站的查询 4.在线提问 5.网站公告 6.登录功能 7.用户管理 8.线路维护 9.公告管理 …

【QT学习】UDP协议,广播,组播

一。Udp详细解释 UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的、不可靠的数据传输服务。与TCP相比,UDP不提供可靠性、流量控制、拥塞控制和错误恢复等功能,但由于其简单性和低开销&#x…

在vue2中,什么是双向绑定,为什么vue3要进行优化?

一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新双向绑定就很容易联想到了,在单向绑定的基础上,用户更新了View,Mo…

# 使用 spring boot 时,@Autowired 注解 自动装配注入时,变量报红解决方法:

使用 spring boot 时,Autowired 注解 自动装配注入时,变量报红解决方法: 1、使用 Resource 代替 Autowired 注解,根据类型注入改为根据名称注入(建议)。 2、在 XXXMapper 上添加 Repository 注解&#xff0…

面向对象编程三大特征:封装、继承、多态

封装、继承、多态 1. 封装 1.1 介绍 封装(encapsulation)就是把抽象出的数据 [属性] 和对数据的操作 [方法] 封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作 [方法] ,才能对数据进行操作。 1.2 封装的理解和好处 1) 隐藏实现细节:方法(连接数据库)<…

Stable Diffusion 模型分享:Counterfeit-V3.0(动漫)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 高质量动漫风格模型。 条目内容类型大模型基础模…

(十三)Servlet教程——Servlet中Cookie的使用

1.什么是Cookie Cookie意为甜饼&#xff0c;最早由Netscape社区发展的一种机制。目前Cookie已经成为标准&#xff0c;所有的主流浏览器都支持Cookie。 由于HTTP是一种无状态的协议&#xff0c;服务器仅从网络连接上无法知道客户身份。于是就客户端颁发一个通行证&#xff0c;无…

SpringBoot框架学习笔记(一):依赖管理和自动配置

本文为个人笔记&#xff0c;仅供学习参考之用&#xff0c;如有不当之处请指出。 本文基于springboot2.5.3版本&#xff0c;开发环境需要是 jdk 8 或以上&#xff0c;maven 在 3.5 1 SpringBoot 基本介绍 1.1 官方文档 &#xff08;1&#xff09; 官网 : https://spring.io/pr…