【Linux系统编程】进程概念与基本创建

news2024/12/25 9:28:09

文章目录

  • 1. 进程的概念
  • 2. 进程描述—PCB
  • 3. task_struct—PCB的一种
  • 4. task_ struct内容分类
  • 5. 查看进程

这篇文章我们来学习下一个概念——进程

1. 进程的概念

那什么是进程呢,我们该如何理解它呢?

如果我们打开电脑的任务管理:

在这里插入图片描述
我们看到这里面就展示了当前正在运行的进程,那大家看这其实就是我们当前打开的程序嘛

所以,我们给出一个结论:

我们以前任何启动并运行程序的行为,都是由操作系统帮助我们将程序转化为进程,来完成特定的任务。

那说到底进程到底是什么呢?我们继续来探讨探讨:

大家看这张图在这里插入图片描述
那我们平时自己写好的可执行程序,我们知道它本质其实就是一个二进制文件嘛
那我们运行这个可执行程序,首先它被载入内存,其实就是把可执行程序里面的指令和数据加载到内存。
在这里插入图片描述
那此时它就变成一个进程了吗?
大家想一个问题,一个社会人进入到你的学校,他就是你们学校的一名学生了吗?
不是的。
那同样的,一个可执行程序或应用程序被加载到内存里面,他就变成了被操作系统管理的进程了吗?
好像也有点不合理。
那一个人如何才算你们学校的学生呢?
是不是它的学籍要在你们学校里,它的信息要在你们学校的教务管理系统上,这才是最关键的。
然后第二个问题,我们可能同时运行多个程序,那他们都要加载到内存里,就好比学校里面有好多学生,那学校肯定要对这么多学生进行一个良好的管理。
那同样的,操作系统也要对加载到内存的多个进程进行管理。

那如何进行管理呢?

很简单,还是我们之前说的——先描述,再组织

2. 进程描述—PCB

那如何描述进程呢?

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

所以:

我们每运行一个程序,除了要把它对应的指令和数据加载到内存,操作系统还会为它创建一个PCB来记录和管理进程信息
那操作系统要管理这么多的进程,就可以把所有进程的PCB用一个数据结构比如链表管理起来(再组织)
在这里插入图片描述
那此后操作系统对于进程的管理就变成了对组织PCB的数据结构的管理

所以,回到我们上面说的:

一个程序被加载到内存,他就是进程了吗?
不是的
进程包括了程序加载到内存中的指令和数据,以及内核中与之关联的进程控制块(PCB)

所以,我们这里给出一个进程的概念:

进程=程序加载到内存中的指令和数据+内核中与之关联的进程控制块(PCB)
此外:
课本概念:程序的一个执行实例,正在执行的程序等
内核观点:担当分配系统资源(CPU时间,内存)的实体。

3. task_struct—PCB的一种

在Linux中描述进程的结构体叫做task_struct
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

4. task_ struct内容分类

task_ struct里面包含了以下内容:

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

可以在内核源代码里找到它,所有运行在系统里的进程都以task_struct链表的形式存在内核里。

然后呢我们上面提到:

可执行程序其实就是一个文件嘛,而文件的话我们说过文件=内容+属性
那程序运行载入到内存里面的指令和数据这毫无疑问肯定是文件的内容。
然后呢我们有提到每个进程操作系统都会创建一个PCB来描述进程,可以理解为PCB就是进程的属性集合。

那请问这里的PCB即进程属性的结合跟可执行文件的属性有没有关系呢?

其实呢有关系,但是关系不大。
磁盘上文件的属性一般就是文件名、文件类型,位置,占用空间这些东西。
而PCB呢,它是由操作系统动态创建和维护的一种内核数据结构,它里面包含的进程的属性都是操作系统自己获取和记录的,跟文件的属性不是一回事,没什么关系。
其实也稍微有点关系,后面会带大家看。

5. 查看进程

那如何查看进程呢?

首先,我们先来写一个代码和makefile:

在这里插入图片描述
编辑一下myprocess.c
在这里插入图片描述
保存退出
然后我们把makefile写一下:
在这里插入图片描述

然后:

我们make一下
在这里插入图片描述
就生成了一个可执行程序myprocess
那我们./执行这个可执行程序,操作系统就会把它加载到内存,同时为他建立PCB(在Linux上是task_struct),然后它就变成了进程
在这里插入图片描述

那我们如何查看这个进程呢?

在这里插入图片描述
让这个进程继续跑着,我们再打开一个渠道
然后我们输入一条命令
在这里插入图片描述
就可以看到我们刚才运行起来的进程
简单解释一下这条命令(这里的命令我们后面会讲)
ps axj | head -1 && ps axj | grep myprocess
这是是逻辑与连接了两条命令,首先ps axj可以显示当前系统中所有进程的详细信息,但是我们不想看所有的,所以管道连接head -1就是去只显示ps axj展示出来的所有信息的第一行(即那个表头信息),然后&&后面又连接一条指令,其实就是过滤取出关键字myprocess对应的进程信息
然后下面那个大家可以不用管,它是因为grep这个也是一个进程,也被过滤出来了
当然可以把它屏蔽掉
在这里插入图片描述
就只剩我们的这一个了
那然后我们再打开一个渠道
在这里插入图片描述
也把这个程序运行起来
然后
在这里插入图片描述
我们就可以观察到两个了

然后我们来观察一下显示的信息:

在这里插入图片描述
我们看到有个PID,就是我们上面提到的进程的唯一标识符。
它们两个是不一样的,所以它们两个是不同的两个进程,虽然是同一个可执行程序运行生成的。

那除了上面查看进程的方式,还有其它方法:

我们还可以通过 /proc 系统文件夹查看进程信息
在这里插入图片描述
proc其实就是process的缩写嘛
/proc 目录是 Linux 系统中的一个特殊目录,提供了有关当前运行进程和内核状态的信息。
需要注意的是,它跟普通的文件不一样,它不是一个真正的文件系统,而是通过内核在内存中维护的一个虚拟文件系统。只有当操作系统启动的时候,它才会存在,并不存在于磁盘上。
但是这里我们好像没有看到process。

这里有很多数字,代表什么呢?

🆗,这些数字其实是特定进程的PID,我们是能找到上面我们两个process进程的PID的
在这里插入图片描述
这些数字是蓝色的,我们知道蓝色表示它是一个目录/文件夹。
所以:
一个进程被创建好,操作系统会自动在proc目录下创建一个以新增进程的PID命名的文件夹
在这里插入图片描述

我们可以进去看看

在这里插入图片描述
这里面有很多内容,这些内容其实就是当前进程的相关属性信息
这些东西大多我们还看不懂,但是
在这里插入图片描述
大家看这两个,不就是对应程序的路径吗。
那着就是我们前面说的进程的属性跟文件的属性也稍微有一点关系

那然后:

在这里插入图片描述
我们当前是在proc里面这个进程PID对应的这个目录里面的,上面说了PID对应的目录是进程创建的时候才会在proc目录下新增的。
那如果我们把对应的进程终止(CTRL+c)掉
在这里插入图片描述
在想查看这个目录的内容就不行了
在这里插入图片描述
上一级我们也回不去了。
因为进程终止,操作系统就会在proc目录下把这个进程PID对应的目录及其里面的内容删除掉。所以proc目录里面的内容是动态变化的。

这篇文章就先到这里,下一篇文章我们继续讲解进程相关的内容…
在这里插入图片描述

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

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

相关文章

7.zigbee开发,低功耗,通信加密开发

一。低功耗 1.低功耗应用场景 1、不利于更换电池的设备 2、手持便携设备 3、实时性要求不高的设备 2.低功耗工作原理 1、时钟降至最低 2、暂时不用的外设关闭、需要在启动 3、I/O配置 用电情况可以简化为: 等一会运行一下。 3.zigbee实现低功耗 1.协调器路由器终端…

【性能优化上】第三方组织结构同步优化一,分状态,分步骤的设计,你 get 到了吗?

在工作中,云产品之间自然少不了各种系统的对接,系统对接自然会涉及到各种鉴权,以及需要将对方系统的组织结构同步到己方内部系统中来 当然,有的产品可能会去对接实际的第三方认证源和同步源,但是成本相对比较高&#…

【数据结构】对称二叉树 另一颗树的子树(六)

目录 一,对称二叉树 题目详情: 解题思路: 思路实现: 源代码: 二,另一颗树的子树 题目详情: 解题思路: 思路实现: 源代码: 前言: 接下来…

计算机视觉:从图像识别到深度学习

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 计算机视觉是人工智能领…

每日一面系列之volatile 的理解

volatile 是 Java 虚拟机提供的轻量级的同步机制,有三大特点:保证可见性;不保证原子性;禁止指令重排 保证可见性 当多个线程操作共享数据时,彼此是不可见的。由此提出 JMM (java 内存模型) J…

爬虫异常处理实战:应对请求频率限制和数据格式异常

作为一名资深的爬虫程序员,今天我要和大家分享一些实战经验,教你如何处理爬虫中的异常情况,包括请求频率限制和数据格式异常。如果你是一个正在进行网络爬虫开发的开发者,或者对异常处理感兴趣,那么这篇文章将帮助你更…

01强化学习的数学原理:大纲

01强化学习学习路线大纲 前言强化学习脉络图章节介绍Chapter 1:Basic ConceptsChapter 2:Bellman EquationChapter 3:Bellman Optimality EquationChapter 4:Value Iteration / Policy IterationChapter 5:Monte Carlo…

数据结构与算法--图

数据结构与算法--图 1 图的基本概念 2 无向图和有向图 3 图相关的关键术语 4 图的相关性质 5 图的存储 4.1 邻接表法 4.2 邻接矩阵法 6 图的代码表示 1 图的基本概念 图(Graph) 是由一个顶点集V和一个弧集E构成的网状数据结构,记作 G ( V , E ) G (V ,E…

RPC框架学习

一、设计目标 RPC 框架的目标就是让远程服务调用更加简单、透明,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者&a…

多线程知识汇总

IntentService 多线程的应用在Android 开发中是非常常见的,常用方法主要有: 集成Thread类 实现Runnable接口 AsyncTask Handler HandlerThread IntentService IntentService 定义: Android 里的一个封装类,继承四大组件之一 ser…

Android 跨进程通信并传输复杂数据

前言 AIDL (Android Interface Definition Language) 支持以下数据类型: 基本数据类型:int、long、float、double、boolean、char、byte。 字符串类型:String。 集合类型:List、Map、Set。 Parcelable 类型:实现了 Par…

linux 文件锁

建议锁,强制锁,记录锁的概念 建议锁: 如果某一个进程对一个文件持有一把锁之后,其他进程仍然可以直接对文件进行操作(open, read, write)而不会被系统禁止,即使这个进程没有持有锁。只是一种编程上的约定。建议锁只对遵守建议锁准则的进程生…

@JsonFormat、@JSONField、@DateTimeFormat详细解说

JsonFormat、JSONField、DateTimeFormat详细解说_jsonfield format_xinlianluohan的博客-CSDN博客 三者出处 1、JsonFormat来源于jackson,Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以…

CSS SASS calc() 计算表达式或使用变量

calc()是css的一个函数,可用于元素计算长度,比如div宽度想要减去一个固定宽度后并自适应,可以写为calc(100% - 60px) 注意“-”两边有空格 sass已经是常用的预编译语言,允许使用变量等规则,如果…

上海亚商投顾:沪指窄幅震荡微跌 两市成交金额创年内新低

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日窄幅震荡,创业板指盘中跌超1%,黄白二线有所分化。华为星闪概念股午后拉升&…

EPC与5GC/5GS互联互通

一、5GS与EPC/E-UTRAN互通的非漫游架构 1.N26接口是MME和5GS AMF之间的CN间接口,以实现EPC和NG核心之间的互通。网络中支持N26接口是可选的,用于互通。N26支持在S10上支持的功能的子集(对于互通是必要的)。 2&#xf…

面试题:HTTPS 是如何保证传输安全的?又被问了!

文章目录 1. HTTP 协议1.1 HTTP 协议介绍1.2 HTTP 中间人攻击1.3 防止中间人攻击 2. HTTPS 协议2.1 HTTPS 简介2.2 CA 认证体系 总结 1. HTTP 协议 在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。 1.1 HTTP 协议介绍 HTTP 协议是一种基于文本的传输协议&…

Android13 大屏设备底部显示TaskBar并NavagatonBar居右

Android 13大屏设备时底下显示任务栏以及虚拟按键靠右的问题, 当前需求是去掉底部任务栏的显示,并把虚拟按键导航栏居中显示。 修改前的效果: 修改后的效果: 通过查看源码逻辑,可以发现只需把isTablet相关的逻辑和…

Mybatis 映射器中映射方法接受多个参数(@Param)

前面我们介绍了使用Mybatis映射器进行数据的增删改查操作;本篇我们继续介绍在Mybatis映射器的映射方法中如何使用多个参数。 如果您对Mybatis使用映射器进行数据的增删改查操作不太了解,建议您先进行了解后再阅读本篇,可以参考: …

【数据结构】二叉树的构建与基本操作实现

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.前序建立二叉树 2.销毁二叉树 3.统计 …