Linux 进程入门:带你走进操作系统的核心地带(1)

news2025/1/10 21:50:57

 🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 

🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩     


在 Linux 操作系统的奇妙世界里,进程就像是一群默默工作的小魔法师🧙‍♂️,它们在后台有条不紊地运行,支撑着整个系统的稳定与高效。对于想要深入了解 Linux 系统的人来说,进程相关知识无疑是一把打开操作系统核心大门的钥匙。今天,就让我们一同踏上这趟探索 Linux 进程的奇妙之旅🎈。


目录

一、从 “管理” 角度理解进程

1.1  描述被管理对象

1.2组织被管理对象

1.3总结

二、进程的基本概念🤔

三、描述进程 - PCB(process control block)📄

task_struct - PCB 的一种🧩

组织进程👥

查看进程🔍

四、通过系统调用获取进程标示符🆔

五、结语 🎉


一、从 “管理” 角度理解进程

在探讨进程之前,我们先通过计算机管理硬件的例子,来理解 “管理” 的概念。计算机要管理硬件,需要完成两个关键步骤:描述被管理对象以及组织被管理对象🤔。

1.1  描述被管理对象

对于计算机硬件的管理,我们通常使用 struct 结构体来描述硬件的各种属性。例如,要描述一块硬盘,结构体可能包含硬盘的容量、型号、接口类型等信息📏。通过这种方式,将硬件的复杂特性以数据结构的形式呈现出来,方便计算机系统进行识别和操作,就像给每个硬件都贴上了详细的 “身份标签”🏷️。

1.2组织被管理对象

为了更高效地管理众多硬件设备,我们会采用链表或其他高效的数据结构来组织它们。链表结构能够方便地添加、删除和查找硬件设备,就像将所有硬件设备串联起来,形成一个有序的集合🎗️。这样,计算机系统在需要访问或操作某个硬件时,能够快速定位到目标设备,提高管理效率,仿佛有了一张清晰的 “硬件地图”🗺️。

1.3总结

从计算机管理硬件的例子可以看出,管理的本质就是先通过合适的数据结构对被管理对象进行详细描述,然后采用高效的组织方式将这些对象有序地整合起来,以便系统能够有效地对它们进行操作和控制✅。


二、进程的基本概念🤔

进程,从课本的角度看,它是程序的一个执行实例,就如同一场戏正在舞台上表演,这个正在执行的程序便是主角🎭。而在内核的眼中,进程则担当着更为关键的角色 —— 分配系统资源(如 CPU 时间和内存)的实体,仿佛是一位精打细算的资源大管家🧑‍💼,合理地调度着每一份资源,确保系统的顺畅运行。

总结表格

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

 


三、描述进程 - PCB(process control block)📄

为了更好地管理这些进程 “小魔法师”,Linux 操作系统为每个进程准备了一份专属的 “魔法档案”—— 进程控制块(PCB),在 Linux 系统中,它具体体现为 task_struct 结构体。(进程属性的集合)

task_struct - PCB 的一种🧩

task_struct 就像一个无所不知的 “大管家”,它安居在内存(RAM)这个 “魔法仓库” 里,详细记录着进程的点点滴滴。

  1. 标示符:这是进程独一无二的 “魔法印记”🆔,就像我们每个人的身份证,凭借它可以轻松地将不同进程区分开来。
  2. 状态:记录着任务状态、退出代码以及退出信号等信息,如同进程的 “健康报告”📈,实时反馈进程的运行状况,是正常运行、准备休息,还是遭遇了什么问题,都能从中一目了然。
  3. 优先级:决定了进程获取 CPU 这个 “魔法能量” 的优先程度,优先级高的进程就像拥有 VIP 特权的客人🌟,能够优先获得执行的机会,在系统资源的竞争中抢占先机。
  4. 程序计数器:宛如进程的 “魔法导航仪”🧭,精确地指明程序中即将被执行的下一条指令的地址,引导着进程的 “魔法之旅” 沿着正确的方向前进。
  5. 内存指针:不仅指向程序代码和进程相关数据,还负责管理与其他进程共享的内存块,它就像进程与内存之间的 “魔法桥梁”🛤️,确保进程能够准确无误地访问和操作所需的内存资源。
  6. 上下文数据:进程执行时处理器寄存器中的数据,恰似进程的 “魔法记忆”🧠,当进程暂停或恢复执行时,它能保证进程的状态不会丢失,如同魔法的延续,让进程能够无缝衔接之前的工作。
  7. I/O 状态信息:包含进程的 I/O 请求、分配到的 I/O 设备以及使用的文件列表,展现了进程与外部设备和文件系统之间的 “魔法互动”🖼️,就像进程与外界沟通的魔法通道,实现数据的输入输出。
  8. 记账信息:诸如处理器时间总和、使用的时钟数总和、时间限制以及记账号等,这些信息就像进程的 “魔法账本”📊,帮助系统统计和管理进程对资源的使用情况,确保资源的合理分配与利用。

 

总结表格

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

组织进程👥

在 Linux 内核这个神秘的 “魔法城堡” 里,所有运行的进程如同有序排列的小魔法师,以 task_struct 链表的形式整齐地组织在一起。这种组织方式就像城堡里的魔法师们按照一定的秩序各司其职,方便内核这位 “大魔法师” 高效地管理与调度它们,确保整个城堡的和谐运转。

 

总结表格

描述详情
组织形式所有运行在系统里的进程以 task_struct 链表的形式存在内核里
位置在内核源代码里可找到

查看进程🔍

如果我们想要了解这些进程 “小魔法师” 的情况,Linux 系统为我们提供了多种神奇的 “魔法工具”。其中一种方法是通过 /proc 系统文件夹,这就像一个神秘的 “魔法档案库”📂,例如,要获取 PID 为 1 的进程信息,只需打开 /proc/1 这个文件夹,里面就藏着该进程的各种详细信息。此外,top 和 ps 等用户级工具也如同贴心的 “魔法助手”🤝,它们能帮我们轻松获取大多数进程的信息,让我们对进程的运行状况了如指掌。

 

总结表格

查看方式详情
系统文件夹通过 /proc 系统文件夹查看,如获取 PID 为 1 的进程信息,查看 /proc/1 文件夹
用户级工具使用 top 和 ps 等用户级工具获取大多数进程信息

四、通过系统调用获取进程标示符🆔

 

 

进程的世界就像一个庞大的魔法家族👨‍👩‍👧‍👦,每个进程都有自己独特的 “魔法身份标识”—— 进程 id(PID),以及它的 “魔法家族长辈”—— 父进程 id(PPID)。通过系统调用这个神奇的 “魔法咒语”🔑,我们就能轻松获取这些标识符,从而清晰地了解进程间的家族关系,揭开它们神秘的身世之谜。

总结表格

标识符含义
进程 id(PID)本进程的唯一标识符
父进程 id(PPID)该进程的父进程的标识符

 


五、结语 🎉

无论是 Linux 系统的其他神秘角落,还是与进程相关的进阶知识,都有可能在新文章里一一呈现✨。请保持关注,精彩即将上线,让我们一同开启下一段知识探索之旅🚀,敬请期待!


   如果在学习过程中有任何疑问或建议,欢迎随时交流分享哦😉! 👉【A Charmer】

 

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

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

相关文章

C#版OpenCv常用函数大全

OpenCvSharp 是 OpenCV 的NET封装,提供了丰富的图像处理和计算机视觉功能。以下是一些常用函数及其详细说明。 1. 图像读取与显示 Cv2.ImRead 功能:读取图像文件并返回一个 Mat 对象。用法:Mat image Cv2.ImRead("path/to/image.jpg&…

【初阶数据结构】线性表之单链表

文章目录 前言 一、单链表的概念与结构 1.概念 2.结点 3.性质 二、实现单链表 1.结构的定义 2.链表的打印和结点的申请 3.单链表的尾插和头插 4.单链表的尾删和头删 5.单链表的查找 6.指定位置之前插入数据和指定位置之后插入数据 7.删除pos结点和删除pos之后的结…

DB-Engines Ranking 2025年1月数据库排行

DB-Engines Ranking 2025年1月数据库排行 DB-Engines排名根据数据库管理系统的受欢迎程度进行排名。排名每月更新一次。 2025年1月,共有423个数据库进入排行。 排行榜 Oracle Oracle 连续三月稳居榜首,排名稳定。2025 年 1 月分数较上月增 5.03&#x…

Hadoop3.x 万字解析,从入门到剖析源码

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

鸿蒙的APP真机调试以及发布

目录: 1、创建好鸿蒙项目2、创建AGC项目3、实现自动签名3.1、手动方式创建签名文件和密码 4、运行项目5、无线真机调试 1、创建好鸿蒙项目 2、创建AGC项目 (1)在File->Project Structure->Project->Signing Configs中进行登录。(未…

Swin Transformer模型详解(附pytorch实现)

写在前面 Swin Transformer(Shifted Window Transformer)是一种新颖的视觉Transformer模型,在2021年由微软亚洲研究院提出。这一模型提出了一种基于局部窗口的自注意力机制,显著改善了Vision Transformer(ViT&#xf…

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>字母大小写全排列

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; private List<String> ret;private StringBuffer path;public List<String> letterCasePermutation(String s) {ret new ArrayList<>();path new StringBuffer();dfs(s,0);return ret;}private voi…

LabVIEW软件侵权分析与应对

问&#xff1a;如果涉及到LabVIEW软件的仿制或模仿&#xff0c;特别是在功能、界面等方面&#xff0c;如何判断是否构成侵权&#xff1f;该如何应对&#xff1f; 答&#xff1a;LabVIEW软件的侵权问题&#xff0c;尤其是在涉及到仿制或模仿其功能、界面、设计等方面&#xff0…

玩转 JMeter:Random Order Controller让测试“乱”出花样

嘿&#xff0c;各位性能测试的小伙伴们&#xff01;今天咱要来唠唠 JMeter 里超级有趣又超实用的 Random Order Controller&#xff08;随机顺序控制器&#xff09;&#xff0c;它就像是性能测试这场大戏里的“魔术棒”&#xff0c;轻轻一挥&#xff0c;就能让测试场景变得千变…

探秘MetaGPT:革新软件开发的多智能体框架(22/30)

一、MetaGPT 引发的 AI 变革浪潮 近年来&#xff0c;人工智能大模型领域取得了令人瞩目的进展&#xff0c;GPT-3、GPT-4、PaLM 等模型展现出了惊人的自然语言处理能力&#xff0c;仿佛为 AI 世界打开了一扇通往无限可能的大门。它们能够生成流畅的文本、回答复杂的问题、进行创…

01、Redis初认识

一、简介 Redis&#xff0c;Remote Dictionary Server &#xff0c;远程字典服务。它是由一个意大利人使用C语言开发的&#xff0c;支持网络、可基于内存也可以持久化的日志型、NoSQL内存数据库&#xff0c;其提供了多种语言的API。 为什么把Reids称为字典服务&#xff1f; …

【2025 Rust学习 --- 10 运算符重载】

重载操作符 算术运算符与按位运算符 Rust 中&#xff0c;表达式 a b 实际上是 a.add(b) 的简写形式&#xff0c;也就是对标准库 中 std::ops::Add 特型的 add 方法的调用。Rust 的标准数值类型都实现了 std::ops::Add。 trait Add<Rhs Self> {type Output;fn add(se…

node-sass@4.14.1报错的最终解决方案分享

输入npm i全安装文件所需的依赖的时候&#xff0c;博主是使用sass去书写的&#xff0c;使用的是node-sass4.14.1和sass-loader7.3.1的版本的&#xff0c;安装的时候老是出现错误&#xff0c; node-sass4.14.1版本不再被支持的原因 node-sass 是一个基于 LibSass 的 Node.js 绑…

LabVIEW大数据有什么应用场景?

LabVIEW在处理大数据时主要依赖于其强大的数据采集、信号处理、控制、以及实时系统的功能。以下是一些典型的应用场景&#xff1a; ​ 1. 工业自动化与制造 数据采集与监控&#xff1a;在生产线上&#xff0c;LabVIEW可以用来收集大量的传感器数据&#xff08;如温度、压力、湿…

深入理解Mybatis原理》MyBatis的sqlSessi

sqlSessionFactory 与 SqlSession 正如其名&#xff0c;Sqlsession对应着一次数据库会话。由于数据库会话不是永久的&#xff0c;因此Sqlsession的生命周期也不应该是永久的&#xff0c;相反&#xff0c;在你每次访问数据库时都需要创建它&#xff08;当然并不是说在Sqlsession…

【OAuth2系列】如何使用OAuth 2.0实现安全授权?详解四种授权方式

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 【OAuth2系列】集成微…

Open WebUI 与 AnythingLLM 安装部署

在前文 Ollama私有化部署大语言模型LLM&#xff08;上&#xff09;-CSDN博客 中通过Ollama来搭建运行私有化大语言模型&#xff0c;但缺少用户交互的界面&#xff0c;特别是Web可视化界面。 对此&#xff0c;本文以Open WebUI和AnythingLLM为例分别作为Ollama的前端Web可视化界…

如何稳定使用 O1 / O1 Pro,让“降智”现象不再困扰?

近期&#xff0c;不少朋友在使用 O1 或 O1 Pro 模型时&#xff0c;都会碰到“降智”或“忽高忽低”的智力波动&#xff0c;比如无法识图、无法生成图片、甚至回答准确度也不稳定。面对这些问题&#xff0c;你是不是也感到头疼呢&#xff1f; 为了找到更可靠的解决办法&#xf…

RK3562编译Android13 ROOT固件教程,触觉智能开发板演示

本文介绍编译Android13 ROOT权限固件的方法&#xff0c;触觉智能RK3562开发板演示&#xff0c;搭载4核A53处理器&#xff0c;主频高达2.0GHz&#xff1b;内置独立1Tops算力NPU&#xff0c;可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。 关闭seli…

58. Three.js案例-创建一个带有红蓝配置的半球光源的场景

58. Three.js案例-创建一个带有红蓝配置的半球光源的场景 实现效果 本案例展示了如何使用Three.js创建一个带有红蓝配置的半球光源的场景&#xff0c;并在其中添加一个旋转的球体。通过设置不同的光照参数&#xff0c;可以观察到球体表面材质的变化。 知识点 WebGLRenderer …