【linux】进程管理:进程控制块、进程号、fork创建进程、特殊进程及exec函数族解析
目录一、进程的概述1、程序和进程的区别2、单道和多道程序设计3、并行和并发的区别4、进程控制块(PCB)5、进程的状态​二、进程号PID1、获取进程号的函数2、获取父进程的ID3、获取进程组的ID三、 fork创建进程1、fork函数2、fork出来的子进程和父进程之间的关系3、子进程 复制 父进程的资源(各自独立)​编辑4、父子进程同时运行​编辑5、父进程 给子进程 足够的准备时间时​四、特殊的进程1、孤儿进程(无危害)​2、僵尸进程(有害)​3、守护进程​五、父进程回收子进程的资源1、wait函数​编辑2、waitpid函数​六、创建多个子进程1、创建2个子进程出现的问题2、防止子进程 创建孙进程七、 进程相关1、终端2、进程组3、会话​编辑4、创建守护进程​编辑八、 vfork创建子进程1、vfork函数说明2、vfork函数和fork函数的区别​编辑九、exec函数族案例1:在代码中使用execl执行ls命令案例2:在代码中使用execlp执行ls命令案例3:在代码中使用execvp执行ls命令​编辑案例4:vfork和exec配合使用,会为子进程开辟新的空间一、进程的概述可执行程序运行起来后(没有结束之前),它就成为了一个进程。程序是存放在存储介质上的一个可执行文件,而进程是程序执行的过程。进程的状态是变化的,其包括进程的创建、调度和消亡。程序是静态的,进程是动态的。1、程序和进程的区别程序 静态的 占磁盘空间(存放在存储介质上的一个可执行文件)进程 动态的 (调度、执行、消亡),占内存空间。(进程是程序执行到结束间的这个过 程)2、单道和多道程序设计单道程序设计 所有进程一个一个排队执行。若A阻塞,B只能等待,即使CPU处于空闲状 态。这种模型在系统资源利用上及其不合理,大部分已被淘汰了。多道程序设计 在计算机内存中同时存放几道相互独立的程序,它们在管理程序控制之 下,相互穿插的运行。当下常见CPU为纳秒级,由于人眼的反应速度是毫秒级,所以看似同时在运行。而多道程序设计必须有硬件基础作为保证。时钟中断(强制让进程让出cpu资源)即为多道程序设计模型的理论基础。3、并行和并发的区别并行(微观)和并发(宏观)都是多个任务同时执行(多道程序)。并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行(微观上同时执行)(多核)并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执 行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时 间分成若干段,使多个进程快速交替的执行(单核 )4、进程控制块(PCB)进程运行时,内核为每个进程分配一个PCB(进程控制块),维护进程相关的信 息,Linux内核的进程控制块是task_struct结构体。 PCB存在于进程的内核空间里面。系统会为每一个进程分配一个进程ID,其类型为pid_t(非负整数) ,进程的状态,有就绪、运行、挂起、停止等状态。进程状态切换时需要保存和恢复的一些CPU寄存器。进程是系统分配资源的基本单位。5、进程的状态进程的三大状态:就绪态、执行态、等待态就绪态:执行条件全部满足,等待CPU的执行调度执行(运行)态:正在被CPU调度执行等待态:不具备CPU调度执行的执行条件,等待条件满足。状态机:ps命令查看进程信息:选项含义-a显示终端上的所有进程,包括其他用户的进 程-u显示进程的详细状态-x显示没有控制终端的进程-w显示加宽,以便显示更多的信息-r只显示正在运行的进程查看进程状态:ps -auxstat中的参数意义如下:以树状显示进程:pstree二、进程号PID每个进程都由一个进程号来标识,其类型为 pid_t(整型),进程号的范围:0~32767。 进程号总是唯一的,但进程号可以重用。当一个进程终止后,其进程号就可以再次使用 。进程号(PID): 标识进程的一个非负整型数父进程号(PPID):父进程号进程组号(PGID): 进程组是一个或多个进程的集合。1、获取进程号的函数头文件:#includesys/type.h#includeunistd.h函数:pid_t getpid(void); 功能: 获取本进程号(PID)参数: 无返回值: 本进程号2、获取父进程的ID#includesys/type.h#includeunistd.hpid_t getppid(void);功能: 获取调用此函数的进程的父进程号(PPID)参数: 无返回值: 调用此函数的进程的父进程号(PPID)3、获取进程组的ID#includesys/type.h#includeunistd.hpid_t getpgid(pid_t pid);功能: 获取进程组号(PGID)参数: pid:进程号返回值: 参数为 0 时返回当前进程组号,否则返回参数指定的进程的进程组号 查看父子进程号:ps -ef查看所有进程号:ps -ajxgetchar();防止进程结束。三、 fork创建进程1、fork函数系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进 程树结构模型。#includesys/types.h#includeunistd.hpid_t fork(void);功能: 用于从一个已存在的进程中创建一个新进程,新进程称为子进程,原进程称为父进程。参数: 无返回值: 成功:子进程中返回 0,父进程中返回子进程 ID。pid_t,为整型。 失败:返回-1。失败的两个主要原因:1)当前的进程数已经达到了系统规定的上限,这时 errno 的值被设置为 EAGAIN。2)系统内存不足,这时 errno 的值被设置为 ENOMEM2、fork出来的子进程和父进程之间的关系使用fork函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间。 地址空间: 包括进程上下文、进程堆栈、打开的文件描述符、信号控制设定、进程优 先级、进程组号等。 子进程所独有的只有它的进程号,计时器等。因此,使用fork函数的代价是很大的 。父子进程从fork后开始继续执行。父子进程是同时运行,空间独立,子进程复制父进程的所有空间,谁先运行不确定。#include stdio.h #include unistd.h int main(int argc,char *argv[]) { //创建子进程 pid_t pid=fork(); if(pid0) { perror("创建失败\n"); } else if(pid==0) { printf("%d为子进程\n",getpid()); } else if(pid0) { printf("%d为父进程\n",getpid()); } getchar(); return 0; }

相关新闻

有没有能同时降 AIGC 疑似率 + 重复率,还免费插图修改的论文网站?

有没有能同时降 AIGC 疑似率 + 重复率,还免费插图修改的论文网站?

各大高校全面启用知网 维普双重检测机制,不仅严控重复抄袭,AIGC 疑似率更是硬性红线,很多同学好不容易把查重压到合格,却因 AI 痕迹过高被打回;理工科、医科学生还要额外耗费数小时修改实验图表、绘制流程图&#xff…

2026/10/18 3:01:29 阅读更多 →
React 17核心特性与升级实战指南

React 17核心特性与升级实战指南

1. React 17核心特性解析React 17作为承前启后的过渡版本,虽然没有引入激动人心的新功能,但在架构层面做出了重大改进。我在实际项目升级过程中发现,这些改变对大型应用的维护和迭代有着深远影响。1.1 渐进式升级机制传统React升级需要全量替…

2026/10/17 1:16:31 阅读更多 →
Webots+ROS 2机器人仿真:从零搭建可落地的数字孪生骨架

Webots+ROS 2机器人仿真:从零搭建可落地的数字孪生骨架

1. 项目概述:为什么一个能“动起来”的仿真机器人,比写一百行纯算法代码更有价值你刚接触ROS 2时,大概率是从turtlesim开始的——那个在终端里画圈的小海龟,可爱、简单、毫无物理意义。它教会你ros2 topic pub和ros2 topic echo&a…

2026/10/16 15:29:55 阅读更多 →

最新新闻

ODL下发SRv6卡壳?用Expect脚本打通SSH批量配置的最后一公里

ODL下发SRv6卡壳?用Expect脚本打通SSH批量配置的最后一公里

记不清这是第几次被问“ODL能不能直接下发SRv6策略”了,尤其在刚接触OpenDaylight(ODL)的人眼里,控制器有了RESTCONF、NETCONF,批量下发OSPF、BGP这类配置应该是顺手的事。但真在现场跑一次,你会发现理想和…

2026/10/18 3:02:07 阅读更多 →
Spring Boot默认连接池HikariCP核心参数与线上调优实战

Spring Boot默认连接池HikariCP核心参数与线上调优实战

Spring Boot项目是个Web应用,基本离不开数据库连接池,而HikariCP作为Spring Boot 2.0之后的默认连接池,几乎每个用Spring Boot的人都在跟它打交道。连接池这东西平时不显山不露水,但一旦接口慢了、连接超时了、数据库连接被打满了…

2026/10/18 3:02:07 阅读更多 →
CentOS 7下XFS文件系统备份恢复实战:xfsdump与xfsrestore避坑指南

CentOS 7下XFS文件系统备份恢复实战:xfsdump与xfsrestore避坑指南

1. 为什么xfs的备份恢复不能照搬ext4那套经验很多人第一次在CentOS 7上处理xfs文件系统的备份恢复,都会下意识地拿ext4时代的经验往上套,结果往往在关键时刻掉链子。我自己就经历过一次:一台跑了两年多的数据服务器,磁盘分区是xfs…

2026/10/18 3:02:07 阅读更多 →
基于GPS授时的异地网络测试方案:原理、实操与避坑指南

基于GPS授时的异地网络测试方案:原理、实操与避坑指南

做网络测试的人,最怕碰到的场景之一就是两端设备不在同一个机房,却要测出可信的端到端时延和抖动。以前遇到这种活儿,基本都是拉一根临时专线,或者用网络损伤仪模拟链路,要么成本高,要么数据不落地。后来我…

2026/10/18 3:02:07 阅读更多 →
M1/M2 Mac部署OpenClaw全攻略:arm64架构下从零跑通龙虾智能体

M1/M2 Mac部署OpenClaw全攻略:arm64架构下从零跑通龙虾智能体

第一次在M1芯片的MacBook上部署OpenClaw,我整整折腾了一个周末。几乎所有现成教程都默认你活在x86_64的世界里,一换到arm64架构就开始连环报错——node_modules装到一半编译失败,Python扩展包全部要从源码重新构建,照着官方文档敲…

2026/10/18 3:02:07 阅读更多 →
微信小程序实现MBTI+霍兰德双职业测评全链路

微信小程序实现MBTI+霍兰德双职业测评全链路

简介:本资源是一套完整的微信小程序实战项目,面向前端初学者与心理学应用开发爱好者,提供MBTI职业性格测试与霍兰德职业兴趣测试的双模测评功能实现方案。项目基于原生微信小程序框架开发,涵盖从题目交互、答案采集、维度计分到结…

2026/10/18 3:01:06 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →