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

进程:pcb

进程控制块(PCB)详解

一、PCB的概念

进程由内核数据结构和代码数据两部分组成。其中内核数据结构就是PCB(进程控制块),在代码中体现为task_struct结构体。该控制块存储了进程的关键控制信息。

1.2 PCB的内容

PCB主要包含以下信息:

  1. 标识符:唯一标识进程的PID(进程ID),可通过getpid()函数获取(需包含<sys/types.h>头文件)
  2. 状态:记录进程当前状态,包括:
    • 运行态(代码正在CPU执行)
    • 阻塞态(等待硬件I/O完成)
    • 挂起态
    • 退出代码和信号
  3. 优先级:相对于其他进程的执行优先级
  4. 程序计数器:存储下一条待执行指令地址的寄存器
  5. 内存指针:指向程序代码、进程数据和共享内存区域的指针
  6. 上下文数据:进程运行时处理器寄存器中的数据。当时间片用完时,未执行完的进程状态会被保存到寄存器中
  7. I/O状态信息:包括I/O请求、分配的I/O设备和使用的文件列表
  8. 记账信息:处理器时间、时钟数、时间限制等统计信息

进程调度采用时间片轮转机制。Linux系统为每个进程分配特定时间片,当前进程用完时间片后即切换至下一进程。

二、进程标识符PID详解

在Linux系统中,每个进程都有唯一的PID标识。可通过以下命令查看进程信息:

  • ps axj:列出所有进程信息(包括PID)
  • ps axj | head -1:显示首行信息类型
  • ps axj | grep 32713:筛选PID为32713的进程信息


我们找到了pid为32713的进程:pross同时他是我们自己建立的进程,但是当我结束进程再次调用./pross运行它是我们会发现:

他的进程pid变化了:

得出当一个进程启动时他的pid也会进行更新;但有没有发现此进程的PPID不会发生变化一直是32440这个是他的父进程;我们不妨看看他的父进程是谁:

bash 是我们操作系统自带的命令行解释器。当创建新进程时,它会先解析命令,然后通过 fork() 系统调用来创建新进程。

在进程创建并且运行的时候会自动在proc目录中生成对应pid进程的所有文件

cwd是进程当前正在工作的目录,exe是这个进程的可执行程序在哪里;

这个工作的目录可以自己改,用fopen(file.txt)或用fork()创建新的文件进程时会自动在当前文件夹创立;会自动以当前进程(二进制文件)的工作路径中创建;

如何更改进程的工作路径

系统调用:

int chdir(const char*path );在path里面写路径;

如何创建子进程?

通过代码创建子进程:使用fork()系统调用生成新进程。

函数名称 fork

功能说明 创建子进程

头文件与函数原型

#include <unistd.h> pid_t fork(void);

fork()的简单使用和其结果

我们发现为什么我只用了一次fork会输入两遍第二个printf指令呢?而且明显最后一个才是创建的子进程;我们不妨在看一个代码:

这时候父子进程就分开了,为啥呢?我们要先知道

关于 fork() 函数的返回值

fork()函数的返回值有三种情况:

  • 返回0:表示当前代码在子进程中执行。
  • 返回正数(子进程的 PID):表示当前代码在父进程中执行。
  • 返回-1:表示fork()调用失败。

    为什么fork会返回两个值?

  • 答:因为在fork()函数中,代码会执行两次返回操作。

    为什么父进程返回正整数而子进程返回0?

  • 答:因为一个父进程可能有多个子进程,创建子进程时父进程需要保存子进程ID,而子进程不需要保存父进程ID。

    一个变量id怎么会有两个值?

  • 答:通过虚拟地址机制,父子进程的ID分别存储在不同地址空间,最终会进行转换映射。

http://www.jsqmd.com/news/511817/

相关文章:

  • DAY3学习
  • 键盘录入(Scanner)和if 语句
  • 计算机常用接口及用途
  • 党政机关如何正确使用 OpenClaw LOGO|含下载
  • 深入理解 SHA1 与 SHA256:从原理到量产级 C 语言实现
  • 南通合同纠纷律师推荐 适配各类需求 - 讯息观点
  • 2026年汽车美容服务费用分析,京津可靠企业Top10 - 工业品网
  • 基于Embedding模型微调的中文意图识别模型(18种意图)
  • java-modbus-读取-modbus4j
  • 用于光镊的Ince高斯光束
  • 聊聊千誉咨询可以信任吗,它在杭州企业中的口碑怎么样 - 工业品牌热点
  • LangChain 快速入门:从基础到生产级 AI 智能体搭建
  • jmeter学习记录
  • 题目2575:蓝桥杯2020年第十一届省赛真题-整除序列
  • 2025年OpenRouter免费模型大盘点:53个零成本AI工具全解析(含Grok-4 Fast/Nemotron Nano 9B V2)
  • 分析电商执照注册公司,杭州靠谱的品牌有哪些? - myqiye
  • 工业软件联动想象:SolidWorks模型命名与春联生成结合创意
  • DEAP数据集预处理避坑指南:从原始.mat文件到GCN-ready的图数据,我踩过的那些坑
  • 【2026最新】Bandizip免费下载:快速压缩解压工具(附安装包+图文步骤) - xiema
  • 破局与重构:大型企业级数字化业务运营平台的深度解构与演进之路(WORD)
  • 猫眼团购 mtgsig1.2算法分析
  • U盘文件或目录损坏且无法读取解决方案
  • 探讨2026年杭州电商执照注册公司,费用多少怎么收费? - mypinpai
  • 算法学习-2.基本数据类型
  • Java方法重载
  • 20TB 零误差迁移,存储成本减半:天合富家的 2.6→3.3 进化记
  • 剖析2026年重庆具备防静电塑料垃圾桶的企业排名,哪家口碑好 - 工业推荐榜
  • Claude coda
  • VS2026安装与项目创建指南
  • 【2026年最新600套毕设项目分享】基于SpringBoot的养老中心管理系统(14201)