当前位置: 首页 > 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...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

项目进度管理软件是什么?项目进度管理软件有哪些核心功能?

无论是建筑施工、软件开发&#xff0c;还是市场营销活动&#xff0c;项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素&#xff0c;项目很容易陷入混乱&#xff0c;导致进度延误、成本超支&#xff0c;甚至失败。 项目进度管理软…...

比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表

设计一个MySQL数据库和Clickhouse数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...