当前位置: 首页 > 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对自己的一种保护方式,具体在下一篇我们会介绍。

http://www.lryc.cn/news/547436.html

相关文章:

  • 分布式系统设计(架构能力)
  • 171. Excel 表列序号
  • 在 Java 中使用 Apache POI 为 Word 文档添加水印
  • 贪心算法二
  • 【大模型安全】大模型的技术风险
  • Java 线程池中 shutdown 与 shutdownNow 的区别是什么?
  • 基于Spring Boot的共享学习经验系统的设计与实现
  • 【简单的C++围棋游戏开发示例】
  • 单片机中的基础外设GPIO的知识和应用—(6)
  • 10-Agent循环分析新闻并输出总结报告
  • 十二、Redis Cluster(集群)详解:原理、搭建、数据分片与读写分离
  • 贪心算法解题框架+经典反例分析,效率提升300%
  • 策略设计模式-下单
  • Go加spy++隐藏窗口
  • React基础之tsx语法
  • 一体机:DeepSeek性能的“隐形枷锁”!
  • ALBEF的动量蒸馏(Momentum distillation)
  • 浏览器WEB播放RTSP
  • 将PDF转为Word的在线工具
  • 03. 对象的创建,存储和访问原理
  • 机器学习-GBDT算法
  • redis基础结构
  • 【keil】一种将STM32的armcc例程转换为armclang的方式
  • 计算机视觉算法实战——表面缺陷检测(表面缺陷检测)
  • window下的docker内使用gpu
  • Modbus协议(TCP)
  • 虚拟系统配置实验报告
  • Agentic系统:负载均衡与Redis缓存优化
  • 28-文本左右对齐
  • 建筑兔零基础自学python记录39|实战词云可视化项目——章节分布10(上)