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

【C/C++】进程

一、进程是什么?—— 程序的 “动态化身”

进程是程序在计算机中的一次执行过程,是操作系统资源分配和调度的基本单位。如果把程序比作存放在硬盘上的 “食谱”,那么进程就是厨师按照食谱烹饪的 “动态过程”—— 它不仅包含程序代码(文本段),还涵盖运行时所需的数据(数据段、堆)、栈空间、寄存器状态、进程控制块(PCB)等核心资源。

在 Linux 系统中,所有进程都源于init进程(PID=1),通过 fork/exec 机制创建新进程,形成树形结构。使用ps -ef命令可查看系统中所有进程的 PID(进程唯一标识)、PPID(父进程 ID)、状态等关键信息,这是排查进程问题的基础操作。

二、进程的生命周期与状态转换

进程从创建到终止会经历多个状态,Linux 系统中核心状态包括 5 种:

  1. 运行态(R):进程正在 CPU 上执行,或处于就绪队列等待调度;
  1. 就绪态:进程已分配所有必要资源,只需等待 CPU 空闲即可执行;
  1. 阻塞态(D):进程因等待某类事件(如 I/O 完成、信号量)而暂停,此时即使 CPU 空闲也无法执行;
  1. 终止态(Z):进程执行完毕,但父进程未回收其资源(如 PCB),形成 “僵尸进程”;
  1. 暂停态(T):进程被信号暂停(如kill -STOP PID),需通过kill -CONT PID恢复。

状态转换的核心触发事件包括:CPU 调度(R↔就绪)、I/O 请求(R→D)、信号处理(R→T)、进程退出(R→Z)等。理解状态转换是定位进程卡顿、僵尸进程等问题的关键。

三、进程管理的核心操作与实践

1. 进程创建:fork 与 exec 的协同
  • fork():通过复制父进程创建子进程,子进程与父进程共享代码段,数据段和栈空间独立(写时复制);
  • exec():替换进程的代码段和数据段,加载新程序执行,PID 保持不变。

示例代码(C 语言):

#include <stdio.h>

#include <unistd.h>

int main() {

pid_t pid = fork(); // 创建子进程

if (pid == 0) {

execlp("ls", "ls", "-l", NULL); // 子进程执行ls命令

} else if (pid > 0) {

wait(NULL); // 父进程等待子进程结束

printf("子进程执行完毕\n");

}

return 0;

}

2. 进程通信(IPC)机制

进程拥有独立地址空间,无法直接访问彼此数据,需通过 IPC 机制实现通信:

  • 管道(Pipe):半双工通信,适用于父子进程;
  • 消息队列(Message Queue):按类型传递数据,支持非亲缘进程;
  • 共享内存(Shared Memory):最快的 IPC 方式,进程直接访问共享内存区域;
  • 信号量(Semaphore):用于同步与互斥,防止并发冲突。
3. 进程调度:抢占式与非抢占式

操作系统通过调度算法分配 CPU 资源,Linux 采用完全公平调度(CFS)

  • 为每个进程分配权重,计算虚拟运行时间;
  • 优先调度虚拟运行时间最短的进程,保证公平性;
  • 支持实时进程(SCHED_FIFO/SCHED_RR),优先级高于普通进程。

四、常见进程问题排查

  1. 僵尸进程:父进程未调用wait()回收子进程资源,可通过kill -9 父进程PID解决;
  1. 孤儿进程:父进程先于子进程退出,子进程被init进程(PID=1)收养,资源会被正常回收;
  1. 进程占用过高 CPU:使用top命令定位高 CPU 进程,结合perf工具分析代码瓶颈;
  1. 进程阻塞:通过ps -aux | grep D查看阻塞进程,排查 I/O 设备或资源依赖问题。

五、总结

进程是操作系统抽象的核心,理解其本质、生命周期、管理机制和 IPC 通信,是掌握系统编程和性能优化的基础。无论是开发多进程应用,还是排查系统故障,都需要深入理解进程的工作原理。实际开发中,需根据场景选择合适的进程创建方式和 IPC 机制,同时关注进程状态和资源占用,避免出现僵尸进程、资源泄漏等问题。

后续将进一步探讨线程、进程池、容器化(Docker)等基于进程的高级应用,欢迎持续关注!

http://www.dtcms.com/a/508529.html

相关文章:

  • 如何让我们的网站新闻被百度新闻收录网站现在用h5做的吗
  • composer安装 laravel 指定版本
  • 手机购物网站建设网站后期维护包括
  • 服装 多语言 网站源码兰州网站建设和推广
  • ipad可以做网站吗忻州市住房城乡建设局网站
  • 中医养生篇
  • 响应式网站建设好么网站开发产品经理招聘
  • 北京哪家公司做网站自备服务器做网站
  • 技能短板导致任务停滞,该如何补救
  • POSIX 可移植操作系统接口规范
  • 公司网站开发费用济南兴田德润o评价沣东新城开发建设集团有限公司网站
  • 重庆网站建设子沃科技外贸网站建设优化
  • 制作网站的走马灯怎么做html网站模板怎么用
  • React Native开发有哪些优势和劣势?
  • 电商类网站开发合同书设计工作室 网站
  • 东莞网站制作与网站建设东莞关键词优化效果
  • MATLAB疑难诊疗:从调试到优化的全攻略
  • Linux Shell 中的 join 命令:高效关联数据的实用工具
  • 网站知识架构网站书店架构书怎么做
  • 建立网站的目的和功能成都到西安动车
  • Redis 数据类型与使用场景
  • 网站关键词快速排名工具中国手机网站大全
  • Android-Compose 列表组件详解
  • 基于MATLAB的标准化降水蒸散指数(SPEI)实现
  • 网站建设与推广推荐做关于车的网站好
  • 【NestJS】中间件与管道:请求处理双雄对决
  • 网站设计做微信发现界面济宁500元做网站
  • 赣州网站制作深圳网站建设 设计创公司
  • 网站后台管理系统怎么上传wordpress计费查询
  • Easyexcel 结合POI 做图片读取