初识Linux下进程

news2024/12/22 23:47:34

🌎初识进程


初识进程

    简单认识一下进程

    如何管理进程

    进程属性信息

    内核运行队列

    查看进程

    通过系统调用获取进程标识符
      父子进程
      查看运行中的进程

    总结


前言

  我们在电脑上点开的一个个应用,其实就是一个个进程,进程仅仅如此吗?今天我们就来认识一下进程,那么话不多说,开启我们今天的话题!

在这里插入图片描述


🚀简单认识一下进程

  打开任务管理器,管理器上显示的所有应用都是进程,例如:

在这里插入图片描述
  这些打开的应用程序,都是进程,这也说明了操作系统可以同时运行多个进程,我们上次学习了操作系统的管理工作,那么os是如何对加载到内存的程序做管理的呢?

  还是那六个字: 先描述再组织

  那么在我们Linux系统下,是如何描述进程的?众所周知,Linux大部分是用C语言写的,而描述进程就会用到struct结构体:

struct XXX{
	//状态
	//优先级
	//内存指针字段
	//标识符
	//..包含进程几乎所有的属性字段
	
	struct XXX *next; 
}; 

  先描述,就是将进程的属性信息放在结构体当中。


🚀如何管理进程

  可执行程序被加载到内存的时候,仅仅是 将可执行程序的代码和数据加载进来 了,但是os并不认识你:

在这里插入图片描述

  这就好比,你跟你的好朋友小明是室友,今天你们去蹭陌生人的席,但是不巧的是被主人发现了,主人一脸奇怪的看着你俩。这个时候,因为主人没有对应的信息,所以主人并不认识你。
  但是你急中生智,你告诉主人家:我们是你七大姑的八大姨家的孩子,他是我弟弟。然后你就拿出了500块钱,说:刚才忘记上账了。这个时候主人家也不管你是不是亲戚了:“来了就是客人,钱我就收着了,你去登记吧~,一人250。”

  对于操作系统也是如此,既然你已经加载进来了,os为了 更好的管理这些程序,就需要把你的信息交给操作系统。

  所以就需要将可执行程序的结构体变量实例化,也就是创建 结构体对象 !所以 每一个 可执行程序都有对应的描述其结构体的对象。

  进程全称为:Process Control Block进程控制块),简称:PCB

struct PCB{
	//状态
	//优先级
	//内存指针字段
	//标识符
	//..包含进程几乎所有的属性字段
	
	struct PCB *next; //链式结构,指向下一个PCB对象
}; 

  我们已经描述完了一个结构体对象,那么如何组织呢?其实在进程结构体对象当中,有着一个 next 指针,用来指向下一个PCB对象形成链式结构,这样,所有的进程就都可以关联起来了。

在这里插入图片描述

  那么这个PCB对象就是进程吗?也不是,进程是:进程 = 内核数据结构 + 可执行程序。这里的 内核数据结构 暂时 可以理解为 进程的PCB对象

在这里插入图片描述


🚀进程属性信息

  PCB是进程比较官方的叫法,在Linux下我们的进程实际上叫做:task_struct。其中 task_struct 是 PCB 的一种

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

  这里需要提及的一点就是 程序计数器,我们CPU是如何知道我们当前行代码的下一行代码在哪个位置呢?比如 当我们正在执行一个从1累加到100的程序

在这里插入图片描述
  很多人会误以为CPU很快,所以很聪明,其实 CPU非常 “笨”, 因为CPU的工作内容就是:取指令 ——> 分析指令 ——> 执行指令,执行完成后,一直循环这几个步骤

  就像一个百米运动员,跑的很快,但是给他拿一套高数卷子,可能就让他头大了。

在这里插入图片描述

  那么我们CPU是如何执行指令的呢?其实在CPU内部有一个名为 eip/pc 寄存器,这个寄存器被称为 pc指针(point code),这个pc指针会指向 当前正在执行指令的下一条指令的地址!

  那么也就是说,pc指针指向哪个代码块,哪个进程就会被执行

在这里插入图片描述
  进程里的这些其他属性我们往后会慢慢地接触,目前了解即可,我们可以先看一下在Linux源码当中,task_struct到底是什么样的:

  
  展示的仅仅是task_struct 的 一小段代码,而完整的task_struct 大约有几百行代码,篇幅有限,这里就不多展示了,有兴趣可以自己查阅Linux源码。

  这里我想要说明的是,进程中的属性是非常多的,当然这些属性有着自己的用途,以后我们就会慢慢接触。


🚀内核运行队列

  我们已经初步了解了进程,可是,当CPU想要去运行进程,该如何去运行这么多进程呢?其实在CPU内部,会给这些进程排个队,依次来执行这些进程,也就是所谓的 运行队列

  内核的运行队列也是通过 先描述再组织 的方式来实现的,先描述,将需要的进程数据与信息放在运行队列的结构体当中,再组织,创建结构体对象,对进程信息进行排队管理。

struct runqueue//内核运行队列
{
	int count;//进程计数
	PCB *head;//指向进程的头指针,以便于能够执行
	//...其他属性信息
}

在这里插入图片描述
  所以教材上所谓的 CPU让进程排队,就是让进程的PCB排队,而不是让进程的可执行程序去排队!


🚀查看进程

  我们知道了进程的概念,那么我们想看看进程到底长什么样子,如何操作呢?我们可以使用:

ls /etc #在etc目录下查看进程

在这里插入图片描述
  使用 ls 命令在 etc 目录下查看进程即可,当然也可以使用 ps 命令:

ps#查看当前正在运行的进程有哪些

在这里插入图片描述

  可以看到当前运行的进程就是 bashps 命令,我们也可以查看更多进程,使用ps命令时,带上 ajx 或者 aux 选项:

ps ajx#或者ps aux都可

在这里插入图片描述
  当然还有其他的查看进程的方法,这里就不再赘述了,有兴趣可以自己查资料。


🚀通过系统调用获取进程标识符

✈️父子进程

  在开始上手实操之前,我们需要了解一下什么是父子进程:

  在我们用ps命令查看系统的进程的时候,上面的属性信息就写着一个进程的父子进程的id:

在这里插入图片描述

  其中的 PID就是该进程自己的idPPID指的是该进程的父进程id,这也就是该进程的进程标识符,每个进程都有自己的 唯一标识符

✈️查看运行中的进程

  首先我们要先创建一个C的源文件,编译生成可执行程序:

在这里插入图片描述
再配置makefile文件:

在这里插入图片描述

再形成可执行程序:

在这里插入图片描述

我们运行程序,当程序在执行的时候,这个可执行程序就变为了一个 进程

在这里插入图片描述

  我们可以使用如下指令 显示出进程的状态

ps ajx | head -1 && ps ajx | grep 可执行程序 #使用命令行管道,将前面得到的信息向后传递

在这里插入图片描述
  我们可以看到,当程序在运行时,我们可以看到,./mybin 出现在了进程状态栏里面,此时我们进程的 pid为13133ppid为12693。当进程结束时,这个进程也就消失了。

  不对啊,我不记得我们在写程序的时候有写父进程啊?这个父进程id是怎么来的?我们不妨对该父进程 ppid 进行 ps 一下:

ps 进程id#显示id进程的信息

在这里插入图片描述

  其实 这个程序的 默认父进程是bash,这是因为:

  bash是大多数 Linux 系统的登录 shell。当您登录到系统时,bash shell 会启动并等待输入命令。输入命令时,bash shell 会将其解析为一个可执行文件和一组参数,然后在bash上执行该可执行程序

  注意./mybin下面的那个进程是grep的进程,因为在运行的时候,grep命令也变成了一个可执行程序,也是一个进程


📒✏️ 总结

  •  电脑上启动的一个个程序就是进程,更详细点:进程=内核数据结构+可执行程序
  •  我们大部分人的电脑CPU只有一个,所以操作系统需要将很多进程进行管理,用到了运行队列
  •  一个原始进程的父进程是bash

在这里插入图片描述
  如果这篇文章对你有帮助的话,还望三连支持呀~~

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

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

相关文章

计算机网络(7):网络安全

网络安全问题 计算机网络上的通信面临以下的四种威胁: (1)截获(interception)攻击者从网络上窃听他人的通信内容。 (2)中断(interruption)攻击者有意中断他人在网络上的通信。 (3)篡改(modification)攻击者故意篡改网络上传送的报文。 (4)伪造(fabrication)攻击者伪造信息在网…

DrGraph原理示教 - OpenCV 4 功能 - 阈值

普通阈值 OpenCV中的阈值用于相对于提供的阈值分配像素值。在阈值处理中,将每个像素值与阈值进行比较,如果像素值小于阈值则设置为0,否则设置为最大值(一般为255)。 在OpenCV中,有多种阈值类型可供选择&am…

融资项目——异常处理

当前端请求后端服务的时候,如果后端出现bug。会返回给前端通用的500异常结果。 但是在项目开发中,我们一般会定义一个统一结果类R用于返回结果数据,所以我们希望将错误也用统一结果类对象返回给前端。 1. 同一异常处理器。 面对一般的错误&…

二维码地址门牌系统技术服务:让您的生活更便捷,一码通行,安全无忧

文章目录 前言一、融合二维码技术与门牌的便捷服务二、手机开门便捷功能三、智能化安全保障四、智能化、便捷化的新型技术 前言 在数字化时代,二维码门牌系统技术应运而生,为了满足人们对安全、便捷生活的需求。这项技术将二维码与门牌结合,…

关于各种浏览器或操作系统深色模式的设置,看这篇文章就够了

无论你是在家里设立办公室,还是带着笔记本电脑去当地的咖啡馆,或者在格子间度过一天,都可以通过在网络浏览器中启用深色模式来让你的眼睛休息一下。 深色模式不会改变你访问的页面的颜色(这是由网站开发者设置的);它将使工具栏和“设置”页面更容易查看,尤其是在冬季较…

centos7通过systemctl启动springboot服务代替java -jar方式启动

背景:以前启动jar包都是通过java -jar,后面了解到一种注册服务式启动jar包的方式,所以做个记录。 注意:我在写该篇博客的时候,给脚本代码都加了#注释来解释该行脚本命令的意思,所以可能出现复制该篇博客脚本…

gookit/color - Go语言命令行色彩使用库教程

gookit/color - Go语言命令行色彩使用库教程 1.安装2.基础颜色(16-color)3.256色彩/RGB风格 1.安装 go get github.com/gookit/color2.基础颜色(16-color) 提供通用的API方法:Print Printf Println Sprint Sprintf 1、例如: color.Yellow.Println(&q…

Elasticsearch:使用 ELSER v2 文本扩展进行语义搜索

Elastic 提供了一个强大的 ELSER 供我们进行语义搜索。ELSER 是一种稀疏向量的搜索方法。我们无需对它做任何的微调及训练。它是一种 out-of-domain 的模型。目前它仅对英文进行支持。希望将来它能对其它的语言支持的更好。更多关于 ELSER 的知识,请参阅文章 “Elas…

关键字:new关键字

在 Java 中,new关键字用于创建对象实例。它是对象创建的语法糖,用于分配内存空间并调用构造函数来初始化对象。 以下是new关键字的基本语法: 在上述语法中,ObjectType是要创建对象的类名,objectName是对象的引用变量…

Android textview展示富文本内容

今天实现的内容,就是上图的效果,通过Span方式展示图片,需要支持文字颜色改变、加粗。支持style\"color:green; font-weight:bold;\"展示。尤其style标签中的font-size、font-weight是在原生中不被支持的。 所以我们今天需要使用自…

听GPT 讲Rust源代码--compiler(2)

File: rust/compiler/rustc_codegen_cranelift/build_system/prepare.rs 在Rust源代码中,rust/compiler/rustc_codegen_cranelift/build_system/prepare.rs文件的作用是为Cranelift代码生成器构建系统准备依赖项。 具体来说,该文件的主要目标是处理Crane…

HarmonyOS自学-Day3(做个登录功能小案例)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧!登录功能小案例 文章声明⭐⭐⭐ 该文章为我(有编程语言基础,非编程小白)的 HarmonyOS自学笔记,此类文章笔记我会默认大家都学过前端相关的知识知识来源为 HarmonyOS官方文…

信息管理就业方向之产品经理

学长分享自己确定互联网产品经理的工作方向以及产品经理的相关工作情况。 互联网领域产品经理是对一个软件或者平台产品的运维和设计。比如网上订机票业务,需要根据筛选用户的需求,确定要实现的某个需求,然后画出原型图,流程图等…

blender mix节点和它的混合模式

Mix 节点是一种用于混合两个颜色或者两个图像的节点,它有以下几个输入和输出: Color1:用于接收第一个颜色或者图像,也就是基色。Color2:用于接收第二个颜色或者图像,也就是混合色。Fac:用于控制…

一个计算机视觉从业者2023回顾

作为一个计算机视觉从业者,我非常认同上面所列的技术发展规划。在计算机视觉领域,我认为要实现这些规划,需要注重以下几个方面的发展和预测: 深入学习新技术:计算机视觉领域的技术发展非常迅速,不断涌现出新…

原生与封装Ajax

Ajax 一.Ajax概述 1.应用场景 在线视频、直播平台等…评论实时更新、点赞、小礼物、…会员注册时的信息验证,手机号、账号唯一百度关键搜索补全功能 2.简介 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML)&#x…

全面分析解决mfc110u.dll丢失的5种方法,简单三步即可搞定

在计算机使用过程中,我们可能会遇到一些错误提示,其中“找不到mfc110u.dll”是常见的一种。mfc110u.dll是Microsoft Foundation Class(MFC)库中的一个动态链接库文件,它提供了许多用于开发Windows应用程序的函数和类。…

Win7/Win10/Win11系统优点缺点

Windows7优点: 熟悉的用户界面:Windows 7具有传统的用户界面,对于习惯了Windows XP或Windows Vista的用户来说很容易上手。 稳定性高:Windows 7在稳定性方面表现良好,大多数用户都能够获得可靠的性能和运行体验。 兼容…

分库分表之Mycat应用学习二

3 Mycat 概念与配置 官网 http://www.mycat.io/ Mycat 概要介绍 https://github.com/MyCATApache/Mycat-Server 入门指南 https://github.com/MyCATApache/Mycat-doc/tree/master/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%973.1 Mycat 介绍与核心概念 3.1.1 基本介绍 历史&#x…

AI绘图之风景画

这一段时间AI画图比较火,笔者也尝试了一些工具,在使用的过程中发现midjourney比较适合小白,而且画的画比较符合要求。质量也高。当然AI时代的来临大家也不要太慌,毕竟人才是最重要的,AI还是要靠人输入内容才可以生成内…