【Linux系统】-----进程初相识:原理与概念全解析
Linux系列
文章目录
- Linux系列
- 前言
- 一、进程的概念
- 二、进程的管理
- 三、Linux操作系统的进程管理
- 3.1、进程标识符
- 3.2、查看进程
- 3.3、查看进程的PID和PPID
前言
经过前两篇文章的铺垫,我们对操作系统的管理方式已经有了比较完整的认识,今天我们将学习Linux比较重要的知识--------进程,学习进程可以帮助我们更好的理解操作系统对数据处理、软硬件资源的管理。
一、进程的概念
进程是指在系统中正在运行的一个应用程序的实例,是程序在计算机上的一次执行过程。它是操作系统进行资源分配和调度的基本单位。
再结合我们之前学习过的冯诺依曼体系结构进一步理解,我们说,一个程序要想被执行,就必须先加载到内存中,而在这里我们称,一个已经加载到内存中的程序,叫做进程,即:正在运行的程序叫做进程。
二、进程的管理
在学习过操作系统后,我想大家一定都可以认识到是操作系统在管理进程。
一个操作系统,不仅仅只能运行一个进程,它可以同时运行多个进程。比如:你在打游戏的时候听歌、聊天。我们可以同时运行多个进程,但是为了保证,各个进程之间互不影响,操作系统就需要将这些进程管理起来,那么他是如何管理的呢?和对硬件的管理一样,先描述,再组织!!!
对进程行描述:任何一个进程,在加载到内存的时候,形成真正的进程时,操作系统要先创建,描述进程属性的结构体对象--------PCB,process ctrl block,也称为进程控制块,其本质就是一个struct结构体,内部存储的是进程属性,含有以下信息:
- 进程ID(PID):系统为每个进程分配的唯一标识符,用于区分不同进程。
- 父进程ID:标识该进程的父进程,便于进程间的管理和追踪。
- 当前状态:记录进程处于就绪、运行、阻塞等状态。
- 优先级:反映进程获取CPU资源的优先程度。
- 内存指针:指向进程在内存中的存储位置,记录进程代码和数据所在的内存区域。
- 打开文件列表:记录进程当前打开的文件信息,包括文件描述符、文件指针等。
- 程序计数器(PC):存储进程即将执行的下一条指令的地址,确保进程能按正确顺序执行。
- CPU寄存器状态:保存进程上次使用CPU时各寄存器的值,以便进程再次运行时能恢复现场。
- 信号量:用于进程间同步和互斥的变量,协调进程对共享资源的访问。
- 消息队列指针:指向与该进程相关的消息队列,用于进程间的消息传递。
我们来进行一个小总结:当你写的代码加载到内存,形成进程时,操作系统根据你的代码属性等形成一个对应的PCB类型,操作系统根据描述进程的程序控制块将会相关属性初始化,形成PCB对象,至此完成了对进程的描述。
为了方便操作系统管理,操作系统会将他们以链表的形式链接起来:

这样操作系统只需要对包含进程属性的PCB对象进行管理,尽可以达到对进程的管理,进程我们可以将他认为:
内核PCB数据结构对象+我们自己的代码和数据
以上介绍的是对所有操作系统而言,那么再Linux下是怎么做到呢?
三、Linux操作系统的进程管理
在上面我们介绍的知识,适用于所有操作系统,但不同操作系统之间的实现还是有所不同的,对于Linux操作系统来说,在Linux操作系统下我们将PCB称为task_struct结构体,内部同样包含着进程的所有属性。
3.1、进程标识符
上面我们介绍了,PCB包含这块信息
ps ajx ----------显示进程信息

其中PID是操作系统分配给每个进程的唯一标识符,就先我们的身份证一样。
3.2、查看进程
Linux下进程信息存储在/proc目录下,我们可以通过:
ls /proc 查看

蓝色字体为目文件,而名字就是对应进程的PID,他是操作系统更具进程的PID在/proc目录下创建的以PID命名的目录其内部保存的是进程的属性。
当然我们也可以对他进行查看:
ls /proc/对应的PID
接下来我们已自己的进程进行演示:
1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5 while(1)6 {7 printf("我是一个进程\n");8 sleep(1); 9 } 10 return 0; 11 }

这时我们就得到了一个自己的进程。
获取进程PID信息:
ps ajx | head -1&&ps ajx | grep my_pro
第一条指令的意思是,将进程信息打印在管道文件,并拿去管道文件的第一行信息。
&&:的意思是执行过前一条指令后立即执行第二条指令。
第二条指令的意思是,打印进程信息,并筛选出含有‘my_pro’的信息。

这时我们就可以看到,我们所跑的进程的PID:5510,上面我们说操作系统会根据进程的PID创建出对应的目录文件,接下来我们看看它是否存在:

3.3、查看进程的PID和PPID
我们可以直接通过系统调用接口查看当前进程的PID和PPID(当前进程的父进程所对应的PID)
getpid()查看当前进程的PID,getppid()查看当前进程的PPID:
1 #include<stdio.h> 2 #include<unistd.h> 3 int main() 4 { 5 while(1) 6 { 7 pid_t a=getpid(); 8 pid_t parent=getppid(); 9 printf("当前进程的PID%d\n",a); 10 printf("当前进程父进程的PID%d\n",parent);11 sleep(1);12 } 13 return 0; 14 }

这样我们就得到了当前进程的PID和它父进程的PID,当前进程我们是知道的,可是它的父进程是谁呢?我们来搜索一下:

通过搜索结果我们可以看到它的父进程是bash命令行,其是这时因为当我们向命令行中输入执行某个程序的指令时,bash就会创建一个子进程来完成我们的操作,自己则会去等待新的指令,这是bash对自己的一种保护方式,具体在下一篇我们会介绍。
相关文章:
【Linux系统】-----进程初相识:原理与概念全解析
Linux系列 文章目录 Linux系列前言一、进程的概念二、进程的管理三、Linux操作系统的进程管理3.1、进程标识符3.2、查看进程3.3、查看进程的PID和PPID 前言 经过前两篇文章的铺垫,我们对操作系统的管理方式已经有了比较完整的认识,今天我们将学习Linux比…...
分布式系统设计(架构能力)
一、微服务架构 服务治理 Nacos 注册中心(AP模式) CAP选择:Nacos 默认采用 AP 模式(可用性 分区容忍性),通过心跳检测实现服务健康管理。服务发现:客户端定时拉取服务列表,支持权重…...
171. Excel 表列序号
Excel 表列序号 题目描述尝试做法推荐做法 题目描述 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: colum…...
在 Java 中使用 Apache POI 为 Word 文档添加水印
在 Java 中使用 Apache POI 为 Word 文档添加水印 在日常办公中,我们经常需要给 Word 文档添加水印,以标明文件的机密性或归属权。本文将介绍如何使用 Apache POI 库在 Java 中给 Word 文档添加水印。 技术栈 Apache POI:用于操作 Word 文…...
贪心算法二
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是贪心算法,并且掌握贪心算法。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! >…...
【大模型安全】大模型的技术风险
【大模型安全】大模型的技术风险 1.DDoS攻击2.常见的传统网络攻击方式3.恶意意图的识别4.AI生成虚假信息传播5.利用AI进行黑客攻击6.模型对抗攻击7.后门攻击8.Prompt攻击9.数据投毒攻击10.模型窃取攻击11.数据窃取攻击 1.DDoS攻击 2023年11月9日凌晨,OpenAI在官网公…...
Java 线程池中 shutdown 与 shutdownNow 的区别是什么?
Java 线程池中 shutdown 与 shutdownNow 的区别 核心行为差异 | 方法 | 行为描述 | |----------------|----------------------------------------------------------------------------| | shutdown | 平缓关闭线程池:1. 停止接受新任务。2. 已提交的任务ÿ…...
基于Spring Boot的共享学习经验系统的设计与实现
目录 摘 要 第1章 绪论 1.1研究背景与意义 1.2国内外现状 1.3研究目标 第2章 需求分析 2.1业务需求 2.1.1业务概述 2.1.2业务流程 2.2.1用例概述 2.2.2用例描述 2.3非功能性需求 第3章 系统设计 3.1技术路线 3.2系统功能模块设计 3.3系统架构 3.4数据库设计 3.4.1概念结构设…...
【简单的C++围棋游戏开发示例】
C围棋游戏开发简单示例(控制台版) 核心代码实现 #include <iostream> #include <vector> #include <queue> using namespace std;const int SIZE 9; // 简化棋盘为9x9:ml-citation{ref"1" data"citationList&…...
单片机中的基础外设GPIO的知识和应用—(6)
GPIO(通用输入输出)是单片机与外部世界交互的重要接口。单片机的GPIO引脚可以灵活配置为输入、输出、中断或复用功能,广泛应用于LED控制、按键读取、传感器通信等场景。下文以STM32F103C8T6的GPIO为例。有些51单片机IO功能有的稍微有不同&…...
10-Agent循环分析新闻并输出总结报告
目录 关键词 摘要 速览 自动新闻总结与行业分析报告生成流程 创建深度行业分析报告的工作流 测试用例执行与调试 业务逻辑与循环处理任务 演示如何在循环体中添加链接读取工具 使用大模型处理和分析新闻信息 构建循环分析新闻并生成综合报告的流程 分析和优化慢速循…...
十二、Redis Cluster(集群)详解:原理、搭建、数据分片与读写分离
Redis Cluster(集群)详解:原理、搭建、数据分片与读写分离 Redis Cluster 是 Redis 官方提供的分布式存储方案,通过数据分片(Sharding)实现 水平扩展(scalability),并提供 高可用性(HA) 和 故障自动转移(failover) 能力,解决了单机 Redis 内存受限、主从复制故障…...
贪心算法解题框架+经典反例分析,效率提升300%
贪心算法是一种在每一步选择中都采取当前状态下的最优决策,从而希望最终达到全局最优解的算法策略。以下从其定义、特点、一般步骤、应用场景及实例等方面进行讲解: 定义与基本思想 • 贪心算法在对问题求解时,总是做出在当前看来是最好的选…...
策略设计模式-下单
1、定义一个下单context类 通过这类来判断具体使用哪个实现类,可以通过一些枚举或者条件来判断 import com.alibaba.fastjson.JSON; import com.tc.common.exception.BusinessException; import com.tc.common.user.YjkUserDetails; import com.tc.institution.cons…...
Go加spy++隐藏窗口
最近发现有些软件的窗口就像狗皮膏药一样,关也关不掉,一点就要登录,属实是有点不爽了。 窗口的进程不能杀死,但是窗口我不想要。思路很简单,用 spy 找到要隐藏的窗口的句柄,然后调用 Windows 的 ShowWindo…...
React基础之tsx语法
tsx在jsx的基础上添加了新的类型,除此之外没有任何区别 事件绑定 function App() { const handleClick()>{ console.log(button被点击了); } return( <div className"App"> <button onClick{handleClick}>click me</button> </di…...
一体机:DeepSeek性能的“隐形枷锁”!
一体机是DeepSeek交付的最佳方式吗? 恰恰相反,一体机是阻碍DeepSeek提升推理性能的最大绊脚石。 为啥? 只因DeepSeek这个模型有点特殊,它是个高稀疏度的MoE模型。 MoE这种混合专家模型,设计的初衷是通过“激活一堆专…...
ALBEF的动量蒸馏(Momentum distillation)
简单记录学习~ 一、传统 ITC Loss 的局限性 One-Hot Label 的缺陷 传统对比学习依赖严格对齐的图文对,通过交叉熵损失(如 softmax 归一化的相似度矩阵)强制模型将匹配的图文对相似度拉高,非匹配对相似度压低11。但 one…...
浏览器WEB播放RTSP
注意:浏览器不能直接播放RTSP,必须转换后都能播放。这一点所有的播放都是如此。 参考 https://github.com/kyriesent/node-rtsp-stream GitHub - phoboslab/jsmpeg: MPEG1 Video Decoder in JavaScript 相关文件方便下载 https://download.csdn.net…...
将PDF转为Word的在线工具
参考视频:外文翻译 文章目录 一、迅捷PDF转换器二、Smallpdf 一、迅捷PDF转换器 二、Smallpdf...
告别系统默认驱动:手把手教你为沁恒CH38x/CH35x PCIe串口卡加载官方Linux驱动(含常见错误排查)
告别系统默认驱动:手把手教你为沁恒CH38x/CH35x PCIe串口卡加载官方Linux驱动(含常见错误排查) 在嵌入式开发和工业控制领域,串口通信的稳定性和功能完整性往往直接影响整个系统的可靠性。当使用沁恒CH38x/CH35x系列PCIe串口卡时…...
内容创作团队如何利用多模型API提升图文生成效率
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 内容创作团队如何利用多模型API提升图文生成效率 对于新媒体运营、电商内容或市场团队而言,持续产出高质量的图文内容是…...
如何用Cyber Engine Tweaks终极解锁赛博朋克2077的完整定制体验:新手快速入门指南
如何用Cyber Engine Tweaks终极解锁赛博朋克2077的完整定制体验:新手快速入门指南 【免费下载链接】CyberEngineTweaks Cyberpunk 2077 tweaks, hacks and scripting framework 项目地址: https://gitcode.com/gh_mirrors/cy/CyberEngineTweaks 你是否厌倦了…...
ARM SMMU-700内存管理单元原理与优化实践
1. MMU-700 SMMU架构概述与典型应用场景内存管理单元(MMU)是现代计算机系统中不可或缺的核心组件,负责处理虚拟地址到物理地址的转换。在ARM架构中,系统级内存管理单元(SMMU)扮演着更为关键的角色ÿ…...
OpenCore Legacy Patcher终极指南:5步让老旧Mac完美运行最新macOS系统
OpenCore Legacy Patcher终极指南:5步让老旧Mac完美运行最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是…...
柔性LED灯丝DIY:从电路原理到创意饰品制作全攻略
1. 项目概述:当生日遇上柔性LED灯丝给孩子的生日派对准备一份独一无二的、会发光的惊喜,是很多家长和手工爱好者的心愿。这次,我们不买现成的塑料灯牌,而是亲手做一个能戴在头上或挂在脖子上的“生日数字灯冠”。这个项目的核心&a…...
荣品RV1126 SDK编译避坑指南:从环境配置到分区调整,手把手解决常见编译错误
RV1126 SDK编译实战:从环境搭建到分区优化的全流程解决方案 1. 开发环境配置与初始化 RV1126开发环境的搭建是整个开发流程的第一步,也是后续所有工作的基础。一个稳定、高效的开发环境能够显著提升开发效率,减少不必要的错误。 首先需要确保…...
安全聚合技术:原理、实现与多场景应用
1. 安全聚合技术概述安全聚合(Secure Aggregation)是一种多方安全计算技术,它允许多个互不信任的参与方在不泄露各自私有数据的前提下,共同计算出一个聚合结果。这项技术的核心价值在于解决了数据隐私与数据共享之间的矛盾&#x…...
从零构建本地化AI代码助手:架构、微调与工程实践
1. 项目概述:从零构建你自己的Claude代码助手最近在开发者社区里,一个名为“build-your-claude-code-from-scratch”的项目引起了我的注意。这个标题本身就充满了吸引力——它暗示着一种可能性:我们是否能够不依赖任何现成的、闭源的商业API&…...
Vircadia Native Core:开源虚拟世界服务器核心架构与部署实战
1. 项目概述:一个开源虚拟世界的“引擎心脏”如果你对构建一个属于自己的、去中心化的虚拟世界(Metaverse)感兴趣,或者你正在寻找一个能支撑起大规模、高自由度社交与协作应用的底层平台,那么Vircadia Native Core绝对…...
