进程 ─── linux第10课

embedded/2025/2/28 6:02:59/

目录

回顾上一节

进程

基本概念

描述进程 - PCB

task_struct   -  PCB的一种

task_ struct内容分类

组织进程

下面来介绍task_struct内部

PID 和PPID

子进程与父进程

getpid()和getppid()

杀进程

exe 和 cwd


回顾上一节

        1. 如果我们写的程序要访问硬件,必定通过system call ,贯穿 OS 来访问硬件.

        2. 我们的程序要运行时,现将程序加载到内存, OS内部也会对应出现程序的task_struct 接入到task_struct链表 ,OS只需要对链表进行增删查改,就能对进程进行管理.

进程

基本概念

进程 = 内核数据结构+程序的代码和数据.

进程分为瞬时进程和常驻进程

        1. 瞬时进程                    如ls pwd 指令

        2. 常驻进程                    如网易云音乐(打开后 一直不退 ,需要用户退出)

描述进程 - PCB

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是task_struct

task_struct   -  PCB的一种

  • 在Linux中描述进程的结构体叫做task_struct
  • task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

task_ struct内容分类

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

组织进程

        可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。

        

下面来介绍task_struct内部

PID 和PPID

  • 进程id(PID)
  • 父进程id(PPID)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>int main()
{printf("pid: %d\n", getpid());printf("ppid: %d\n", getppid());return 0;
}

      

子进程与父进程

linux系统中 ,启动后,新建的进程都是由其父进程创建的

linux中默认的shell是bash

在命令行中 ,执行命令/执行程序 , 本质都是bash创建子进程 , 子进程执行命令行中的代码

因为bash不想让命令行的命令影响自己,就创建了子进程.

在 Linux 和 Unix 系统中,Shell 的中文名称通常被称为:命令行解释器 

        linux为了方便呈现进程的信息,构建了一个专门的文件proc

        proc中以数字命名文件夹 ,一个文件夹就是一个进程 ,数字是此进程的pid ,文件夹内部就是该进程的属性

        同一个程序 ,不同时间运行时,它的pid不同

        

注意:

        /proc 不是磁盘级文件 ,电脑关了, /proc就会被释放 ,OS启动时 ,所有进程的pid被集中放到/proc

        /proc是内存级数据

getpid()和getppid()

getpid()函数返回值是pid_t  用于获取此进程的pid  

getppid()用于获取此进程的父进程ID

杀进程

想要进程结束 ,将下面代码中 pid 换成 对应进程的pid即可.

kill -9 pid

exe 和 cwd

用ls /proc/pid  -l 可以将此进程内部属性展示

exe文件 记录的的是此进程(原可执行程序存储的磁盘位置)

cwd文件 记录的是当前路径

        current work dir(当前工作目录)  当前路径 =进程的cwd


http://www.ppmy.cn/embedded/167733.html

相关文章

远程办公2.0:从“被迫适应”到“主动进化”的未来工作革命

远程办公2.0时代&#xff1a;从“被迫适应”到“主动进化”的未来工作革命 ——前沿技术与趋势预测全解析 引言&#xff1a;一场不可逆的全球工作革命 2020年的一场疫情&#xff0c;让全球职场人第一次大规模体验了远程办公的“生存模式”&#xff0c;而五年后的今天&#xff…

【走方格——BFS,增加更新方式】

题目 代码 #include <bits/stdc.h> using namespace std;const int N 1010;int n, w[N][N]; int dist[N][N];struct pll {int x, y; };int bfs() {memset(dist, 0x3f, sizeof dist);queue<pll> q;q.push({0, 0});dist[0][0] 0;while (q.size()){pll u q.front(…

【AI+智造】用DeepSeek支持设备温度、振动、速度、加速度量化数据的应用方案——以常州新能源动力电池制造企业为例

作者&#xff1a;Odoo技术开发/资深信息化负责人 日期&#xff1a;2025年2月25日 一、常州制造业特点与行业选择依据 常州作为“中国新能源之都”&#xff0c;其制造业的核心竞争力体现在新能源产业链的垂直整合能力、智能化升级需求以及科创资源的集聚效应。2024年&#xff0…

浮点数比较大小问题

public static void main(String[] args) {double a 413;double b 0.4;double c 165.2;System.out.println("a*b " a*b);System.out.println("a*b > c 的结果是&#xff1a;" (a*b > c));} 输出&#xff1a; a*b 165.20000000000002 a*b >…

Nginx系列05(负载均衡、动静分离)

目录 Nginx 负载均衡 Nginx 动静分离 Nginx 负载均衡 概念&#xff1a;负载均衡是一种将网络流量分摊到多个后端服务器&#xff08;节点&#xff09;上的技术&#xff0c;以提高系统的可用性、性能和可扩展性。通过负载均衡&#xff0c;Nginx 可以根据一定的算法将客户端请求…

WiFi定位:宠物安全的“秘密武器”

从「全网寻狗」到「实时掌控」的进化史 凌晨三点收到邻居转发的「寻狗启事」&#xff0c;配图里的金毛犬项圈上赫然挂着某品牌定位器 —— 这样的魔幻场景在养宠圈并不罕见。随着宠物经济突破 3000 亿规模&#xff0c;智能定位器早已从「小众玩具」变成「刚需装备」。但你知道…

VScode中Markdown PDF无法正确输出包含数学公式的pdf解决方案

在使用VScode的Markdown PDF插件时&#xff0c;可能会遇到无法正确输出包含公式的PDF文件的问题。下面为你提供一种有效的解决方案。 具体操作步骤 步骤一&#xff1a;定位模板文件 在安装Markdown PDF插件后&#xff0c;你需要找到对应的模板文件。该文件的路径通常如下&am…

无人机自主导航与避障技术!

自主导航的实现 环境感知&#xff1a;通过传感器&#xff08;如摄像头、激光雷达、超声波传感器等&#xff09;获取周围环境信息。 地图构建&#xff1a;利用SLAM&#xff08;同步定位与地图构建&#xff09;技术&#xff0c;实时生成环境地图并确定无人机的位置。 路径规划…