当前位置: 首页 > news >正文

【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 前言 经过前两篇文章的铺垫&#xff0c;我们对操作系统的管理方式已经有了比较完整的认识&#xff0c;今天我们将学习Linux比…...

分布式系统设计(架构能力)

一、微服务架构 服务治理 Nacos 注册中心&#xff08;AP模式&#xff09; CAP选择&#xff1a;Nacos 默认采用 AP 模式&#xff08;可用性 分区容忍性&#xff09;&#xff0c;通过心跳检测实现服务健康管理。服务发现&#xff1a;客户端定时拉取服务列表&#xff0c;支持权重…...

171. Excel 表列序号

Excel 表列序号 题目描述尝试做法推荐做法 题目描述 给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: colum…...

在 Java 中使用 Apache POI 为 Word 文档添加水印

在 Java 中使用 Apache POI 为 Word 文档添加水印 在日常办公中&#xff0c;我们经常需要给 Word 文档添加水印&#xff0c;以标明文件的机密性或归属权。本文将介绍如何使用 Apache POI 库在 Java 中给 Word 文档添加水印。 技术栈 Apache POI&#xff1a;用于操作 Word 文…...

贪心算法二

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是贪心算法&#xff0c;并且掌握贪心算法。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! >…...

【大模型安全】大模型的技术风险

【大模型安全】大模型的技术风险 1.DDoS攻击2.常见的传统网络攻击方式3.恶意意图的识别4.AI生成虚假信息传播5.利用AI进行黑客攻击6.模型对抗攻击7.后门攻击8.Prompt攻击9.数据投毒攻击10.模型窃取攻击11.数据窃取攻击 1.DDoS攻击 2023年11月9日凌晨&#xff0c;OpenAI在官网公…...

Java 线程池中 shutdown 与 shutdownNow 的区别是什么?

Java 线程池中 shutdown 与 shutdownNow 的区别 核心行为差异 | 方法 | 行为描述 | |----------------|----------------------------------------------------------------------------| | shutdown | 平缓关闭线程池&#xff1a;1. 停止接受新任务。2. 已提交的任务&#xff…...

基于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围棋游戏开发简单示例&#xff08;控制台版&#xff09; ‌核心代码实现‌ #include <iostream> #include <vector> #include <queue> using namespace std;const int SIZE 9; // 简化棋盘为9x9‌:ml-citation{ref"1" data"citationList&…...

单片机中的基础外设GPIO的知识和应用—(6)

GPIO&#xff08;通用输入输出&#xff09;是单片机与外部世界交互的重要接口。单片机的GPIO引脚可以灵活配置为输入、输出、中断或复用功能&#xff0c;广泛应用于LED控制、按键读取、传感器通信等场景。下文以STM32F103C8T6的GPIO为例。有些51单片机IO功能有的稍微有不同&…...

10-Agent循环分析新闻并输出总结报告

目录 关键词 摘要 速览 自动新闻总结与行业分析报告生成流程 创建深度行业分析报告的工作流 测试用例执行与调试 业务逻辑与循环处理任务 演示如何在循环体中添加链接读取工具 使用大模型处理和分析新闻信息 构建循环分析新闻并生成综合报告的流程 分析和优化慢速循…...

十二、Redis Cluster(集群)详解:原理、搭建、数据分片与读写分离

Redis Cluster(集群)详解:原理、搭建、数据分片与读写分离 Redis Cluster 是 Redis 官方提供的分布式存储方案,通过数据分片(Sharding)实现 水平扩展(scalability),并提供 高可用性(HA) 和 故障自动转移(failover) 能力,解决了单机 Redis 内存受限、主从复制故障…...

贪心算法解题框架+经典反例分析,效率提升300%

贪心算法是一种在每一步选择中都采取当前状态下的最优决策&#xff0c;从而希望最终达到全局最优解的算法策略。以下从其定义、特点、一般步骤、应用场景及实例等方面进行讲解&#xff1a; 定义与基本思想 • 贪心算法在对问题求解时&#xff0c;总是做出在当前看来是最好的选…...

策略设计模式-下单

1、定义一个下单context类 通过这类来判断具体使用哪个实现类&#xff0c;可以通过一些枚举或者条件来判断 import com.alibaba.fastjson.JSON; import com.tc.common.exception.BusinessException; import com.tc.common.user.YjkUserDetails; import com.tc.institution.cons…...

Go加spy++隐藏窗口

最近发现有些软件的窗口就像狗皮膏药一样&#xff0c;关也关不掉&#xff0c;一点就要登录&#xff0c;属实是有点不爽了。 窗口的进程不能杀死&#xff0c;但是窗口我不想要。思路很简单&#xff0c;用 spy 找到要隐藏的窗口的句柄&#xff0c;然后调用 Windows 的 ShowWindo…...

React基础之tsx语法

tsx在jsx的基础上添加了新的类型&#xff0c;除此之外没有任何区别 事件绑定 function App() { const handleClick()>{ console.log(button被点击了); } return( <div className"App"> <button onClick{handleClick}>click me</button> </di…...

一体机:DeepSeek性能的“隐形枷锁”!

一体机是DeepSeek交付的最佳方式吗&#xff1f; 恰恰相反&#xff0c;一体机是阻碍DeepSeek提升推理性能的最大绊脚石。 为啥&#xff1f; 只因DeepSeek这个模型有点特殊&#xff0c;它是个高稀疏度的MoE模型。 MoE这种混合专家模型&#xff0c;设计的初衷是通过“激活一堆专…...

ALBEF的动量蒸馏(Momentum distillation)

简单记录学习~ 一、‌传统 ITC Loss 的局限性‌ ‌One-Hot Label 的缺陷‌ 传统对比学习依赖严格对齐的图文对&#xff0c;通过交叉熵损失&#xff08;如 softmax 归一化的相似度矩阵&#xff09;强制模型将匹配的图文对相似度拉高&#xff0c;非匹配对相似度压低‌11。但 one…...

浏览器WEB播放RTSP

注意&#xff1a;浏览器不能直接播放RTSP&#xff0c;必须转换后都能播放。这一点所有的播放都是如此。 参考 https://github.com/kyriesent/node-rtsp-stream GitHub - phoboslab/jsmpeg: MPEG1 Video Decoder in JavaScript 相关文件方便下载 https://download.csdn.net…...

将PDF转为Word的在线工具

参考视频&#xff1a;外文翻译 文章目录 一、迅捷PDF转换器二、Smallpdf 一、迅捷PDF转换器 二、Smallpdf...

03. 对象的创建,存储和访问原理

文章目录 01. 对象创建1.1 创建过程概览1.2 类加载检查1.3 为对象分配内存1.4 将内存空间初始化为零值1.5 设置对象的必要信息1.6 总结 02. 对象的内存布局2.1 对象头区域2.2 实例数据区域2.3 对齐填充区域2.4 总结 03. 对象的访问定位其他介绍01.关于我的博客 注&#xff1a;读…...

机器学习-GBDT算法

目录 一. GBDT 核心思想 二. GBDT 工作原理 ​**(1) 损失函数优化** ​**(2) 负梯度拟合** ​**(3) 模型更新** 三. GBDT 的关键步骤 四. GBDT 的核心优势 ​**(1) 高精度与鲁棒性** ​**(2) 处理缺失值** ​**(3) 特征重要性分析** ​五. GBDT 的缺点 ​**(1) 训练…...

redis基础结构

title: redis基础结构 date: 2025-03-04 08:39:12 tags: redis categories: redis笔记 Redis入门 &#xff08;NoSQL, Not Only SQL&#xff09; 非关系型数据库 关系型数据库&#xff1a;以 表格 的形式存在&#xff0c;以 行和列 的形式存取数据&#xff0c;一系列的行和列被…...

【keil】一种将STM32的armcc例程转换为armclang的方式

【keil】一种将所有armcc例程转换为armclang的方式 改的原因第一步下载最新arm6第二步编译成功 第三步去除一些warning编译成功 我这边用armclang去编译的话&#xff0c;主要是freertos中的portmacro.h和port.c会报错 改的原因 我真的服了&#xff0c;现在大部分的单片机例程都…...

计算机视觉算法实战——表面缺陷检测(表面缺陷检测)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 引言 表面缺陷检测是计算机视觉领域中的一个重要研究方向&#xff0c;旨在通过图像处理和机器学习技术自动检测产品表面的缺陷&…...

window下的docker内使用gpu

Windows 上使用 Docker GPU需要进行一系列的配置和步骤。这是因为 Docker 在 Windows 上的运行环境与 Linux 有所不同,需要借助 WSL 2(Windows Subsystem for Linux 2)和 NVIDIA Container Toolkit 来实现 GPU 的支持。以下是详细的流程: 一、环境准备 1.系统要求 Window…...

Modbus协议(TCP)

从今开始&#xff0c;会详细且陆续整理各类的通信协议&#xff0c;以便在需要且自身忘记的情况下&#xff0c;迅速复习。如有错误之处&#xff0c;还请批评指正。 一、Modbus协议的简述 Modbus协议作为应用层协议&#xff0c;基于主从设备模型&#xff0c;主设备负责请求消息&…...

虚拟系统配置实验报告

一、实验拓扑图 二、实验配置 要求一&#xff1a; 虚拟系统&#xff1a; 设置管理&#xff1a; 进行信息配置 R1配置 虚拟系统配置 a&#xff1a; b&#xff1a; c&#xff1a; 测试 a–>b&#xff1a; 检测...

Agentic系统:负载均衡与Redis缓存优化

摘要 本文在前文Agentic系统的基础上&#xff0c;新增负载均衡&#xff08;动态调整线程数以避免API限流&#xff09;和缓存机制&#xff08;使用Redis存储搜索结果&#xff0c;减少API调用&#xff09;。通过这些优化&#xff0c;系统在高并发场景下更加稳定高效。代码完整可…...

28-文本左右对齐

给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单词。必要时可…...