Linux之进程--进程控制

发布时间:2026/7/21 5:46:57

Linux之进程--进程控制
在操作系统中进程控制Process Control是最核心、最基础的系统能力之一。我们运行的每一个程序、每一条命令本质都是操作系统对进程的创建、调度、等待和销毁的完整生命周期管理。一、进程控制核心概念进程是操作系统资源分配和调度的基本单位每个进程都有唯一的PID进程ID并由 PCB进程控制块维护状态、资源、父子关系等信息。Linux 下所有进程均由父进程创建子进程最终形成以init/systemd为根的进程树。进程的完整生命周期分为三步创建父进程通过系统调用生成子进程运行/终止子进程执行业务逻辑主动或被动退出等待回收父进程获取子进程退出状态回收资源避免僵尸进程二、进程创建进程创建在之前的学习我们就了解过一部分fork一个新的进程就是内核数据结构代码,数据二、进程创建进程创建在之前的学习我们就了解过一部分fork创建子进程一个新的进程就是内核数据结构代码,数据fork 返回值三种情况pid0当前是父进程返回值为子进程 pidpid0当前是子进程pid0fork 失败进程数达到系统上限、内存不足为什么我们要创建进程??让子进程和父进程分流,子进程跑父进程的代码1父子进程分流执行分担任务fork之后父子进程共享同一份程序代码但拥有独立进程调度流fork返回值区分逻辑父进程返回子进程 pid子进程返回 0父进程负责监听、调度、等待子进程单独执行业务逻辑两者互不阻塞。 典型场景网络服务器每来一条客户端连接就 fork 一个子进程处理读写。完成进程替换2配合 exec 系列函数完成进程程序替换单纯 fork 只能复制父进程代码如果想让子进程运行全新可执行程序比如 shell 执行外部命令必须搭配exec族函数fork创建子进程复刻父进程环境子进程内部调用execvp/execve丢弃原有代码段加载新程序 父进程不受影响继续原有逻辑。 场景bash 输入lsshell 先 fork 子进程子进程 exec 替换为 ls 程序执行。写时拷贝vs浅拷贝浅拷贝写时拷贝操作系统会将进程fork出来之后的进程他们的数据变成只读如果有任意一方要对数据来进行修改,那么os不会让其直接对该数据进行修改,会先将数据拷贝出来一份,然他再备份的那一块再进行改三、进程终止进程终止就是要释放代码和数据内核数据结构首先先释放代码和数据,然后再释放内核数据结构为什么呢??因为父进程是要知道子进程结束的的具体信息,可以分为以下三种a,b,c都可以利用两个变量来记录这个信息int sigint exit_code再main函数中return的就是进程退出码查看进程终止信号echo ?进程退出码可以根据我们自己自定义也可以是用系统的strerror1.查看系统自己的strerror系统的退出码对应的信息但是我们使用的比较多的还是自定义依靠我们自定义的宏对于C这种情况我们需要知道什么情况使其发生异常,怎么被kill所以退出码对其并没有意义选项场景描述是否触发信号对应信号名称 信号编号 (Signumber)a代码结束返回正确无信号无b代码结束结果不符合预期无信号无c代码未跑完进程异常结束有致命信号1.SIGINT(2)CtrlC 中断2.SIGSEGV(11)段错误3.SIGKILL(9)强制杀进程4.SIGFPE(8)除零崩溃那么应该要怎么退出呢exit vs _exit这是我们之前学到的僵尸进程子进程结束后,父进程没有对子进程进行回收,子进程会一直处于僵尸状态,当我再命令界面ctrlc会将全部的进程都杀死四、进程等待Waitpid_t wait(int *wstatus);wstatus传出参数保存子进程退出状态传NULL表示不关心退出码。阻塞等待:没有子进程退出,父进程一直等待.直到任意一个子进程结束,而且只能是任意的子进程不能说自己想要的子进程执行pid_t ret fork();后系统会生成两份独立进程同一个 fork 返回两个不同值父进程返回 新创建子进程的 PID正整数子进程返回0创建失败内存不够、进程数上限父子都返回-1ret接收了wait子进程的pidWaitpid#include sys/wait.h pid_t waitpid(pid_t pid, int *wstatus, int options);参数 1pid —— 指定要等待的子进程核心区分点分 4 种取值规则pid 0只等待 PID pid 这唯一一个子进程其他子进程退出也不会触发返回。 例waitpid(child_pid, st, 0)只等刚才 fork 出的子进程。pid 0等待和当前父进程同进程组的任意子进程。pid -1等待所有子进程等价wait(st)。pid -1取绝对值abs(pid)作为进程组 ID等待该进程组下所有子进程。参数 2wstatus —— 接收子进程退出状态传NULL不关心子进程退出码丢弃状态传int变量地址内核会把子进程退出信息存入该变量配合宏解析看是否正常终止,如果正常终止就就返回0非正常终止要看退出码参数 3options —— 控制阻塞行为位或组合0默认阻塞模式无特殊功能。WNOHANG非阻塞 没有子进程退出时函数立刻返回0父进程不会卡住可以继续执行业务逻辑。WUNTRACED子进程收到SIGSTOP/SIGTSTP暂停时waitpid 也会返回。WCONTINUED暂停的子进程收到SIGCONT恢复运行时waitpid 也会返回。看一下下面那个现象status对应的不是退出码吗???为什么这里显示不是1,而是256当然我们也可以尝试用真的退出码故意让被除数为0;第 8 个信号8) SIGFPE 含义浮点运算异常除零、浮点数溢出等。父进程通过waitpid是如何获得子进程的退出信息的??子进程结束后不会立即退出,先是释放代码和数据,但是内核数据结构并没有释放,里面记录退出码和退出信号并且处于Z状态,父进程可以通过waitpid获取子进程的pid和一些信息

相关新闻

Claude Code隐写术事件解析与开发者安全防护

Claude Code隐写术事件解析与开发者安全防护

2026/7/21 5:46:57

1. Claude Code隐写术事件概述2026年6月30日,开发者社区爆出震惊业界的消息:Anthropic公司在其开源的AI编程助手Claude Code中植入了隐写术逻辑。这一发现由开发者Adnane Khan在逆向分析v2.1.91版本二进制文件时揭露,相关技术报告迅速在GitHu…

TypeScript本地化编译技术解析与实践指南

TypeScript本地化编译技术解析与实践指南

2026/7/21 5:46:57

1. TypeScript本地化编译的技术突破2026年TypeScript生态迎来重大革新——开发者终于能够将TS代码直接编译为本地可执行文件,彻底摆脱JavaScript运行时的束缚。这一突破性进展主要基于三大核心技术:SWC编译链:由Rust编写的高性能TypeScript/J…

RAG技术实战:从原理到生产级应用优化

RAG技术实战:从原理到生产级应用优化

2026/7/21 5:46:57

1. RAG技术全景解析:从概念验证到生产落地的完整路径 检索增强生成(Retrieval-Augmented Generation)技术正在重塑AI应用开发范式。作为大模型时代的关键基础设施,RAG通过将信息检索与文本生成能力相结合,有效解决了传…

libsm64调试技巧:使用调试打印功能追踪游戏逻辑

libsm64调试技巧:使用调试打印功能追踪游戏逻辑

2026/7/21 16:37:42

libsm64调试技巧:使用调试打印功能追踪游戏逻辑 【免费下载链接】libsm64 Mario 64 as a library for use in external game engines 项目地址: https://gitcode.com/gh_mirrors/li/libsm64 libsm64是一个将《超级马里奥64》游戏引擎封装为库的开源项目&…

sig:终极交互式流式数据搜索工具完全指南

sig:终极交互式流式数据搜索工具完全指南

2026/7/21 16:37:42

sig:终极交互式流式数据搜索工具完全指南 【免费下载链接】sig Interactive grep (for streaming) 项目地址: https://gitcode.com/gh_mirrors/si/sig sig是一款专为流式数据设计的终极交互式搜索工具,能够实时搜索和过滤数据流。无论您是处理日志…

嵌入式音频系统错误处理与McASP鲁棒性设计实战指南

嵌入式音频系统错误处理与McASP鲁棒性设计实战指南

2026/7/21 16:37:42

1. 项目概述:为什么音频系统的错误处理如此重要?在嵌入式音频系统开发中,我们常常把大部分精力放在如何让声音“响起来”上——配置正确的时钟、设置数据格式、打通DMA通道。然而,一个真正能在产品中稳定运行的音频系统&#xff0…

数论之狂想:从五合团到宇宙的活气,在算不尽的缝隙中寻找生命

数论之狂想:从五合团到宇宙的活气,在算不尽的缝隙中寻找生命

2026/7/21 16:37:42

题记 以下所有内容皆可视为思想实验。不声称“揭示了数学的终极真相”,只声称“从这条路径看过去,看到的风景≈长这样”。包括这句话本身。 第一章:真理的坐标系——王磊-元宝相对性引理 一、一条未被收录的引理 有一条引理。它没有被任何教科…

AI视频互动率优化的“临界点法则”(基于127万条真实视频行为数据建模)

AI视频互动率优化的“临界点法则”(基于127万条真实视频行为数据建模)

2026/7/21 16:37:42

更多请点击: https://kaifayun.com 第一章:AI视频互动率优化的“临界点法则”核心定义与实证发现 “临界点法则”指在AI驱动的视频内容分发中,存在一个由用户注意力衰减曲线、模型响应延迟、交互反馈闭环时长三者动态耦合决定的阈值区间&…

基于springboot的自助洗车店运营系统设计

基于springboot的自助洗车店运营系统设计

2026/7/21 16:27:42

目 录 摘 要 Abstract 1 绪论 1.1 选题依据及意义 1.2 国内外研究现状 1.3论文结构安排 2 开发环境与技术 2.1 MySQL数据库 2.2 B/S结构 2.3 Vue.js框架 2.4 SpringBoot框架 3 系统分析 3.1可行性分析 3.2系统性能分析 3.3 系统流程和逻辑 3.…

微服务进阶:服务网格与Istio

微服务进阶:服务网格与Istio

2026/7/21 5:45:57

541|微服务进阶:服务网格与Istio 上篇文章我们聊了微服务的基本概念和拆分方法。 但微服务多了,问题也多了: 服务之间怎么通信? 怎么监控每个服务的调用链路? 熔断、限流、重试怎么做? 安全认证怎么统一? 以前这些都靠SDK库(比如Hystrix、Feign),每个服务都要集成…

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

零售超级终端全域协同:ShareKit 碰一碰商品流转业务落地案例

2026/7/21 9:56:14

一、零售门店全域协同业务背景与行业痛点 1.1 门店超级终端设备矩阵(连锁便利店/商超标准配置) 自助收银Kiosk一体机:顾客结算、自助核销优惠券、商品素材预览;运营折叠平板:店长后台商品上新、图片录入、活动配置、…

噗叽短视频界面分析

噗叽短视频界面分析

2026/7/21 3:09:32

1 和小红书类似,可以采用类似判断方法------------其实他比小红书好判断,因为他没有图片,控件位置几乎是固定的,都不用判断------------2 因为他没有点赞按钮------------而且几乎所有控件位置都是完全一样的,所以我就…

GraphRAG Local + Ollama:微软知识图谱本地化

GraphRAG Local + Ollama:微软知识图谱本地化

2026/7/21 0:06:35

普通 RAG 有个老毛病:你问它「这堆文档整体在讲什么」,它答不上来。因为它只会把问题切成向量,去几十个文本块里捞最相似的几段拼给模型看。可「整体讲什么」这种问题,答案根本不在任何单独一段里——它散在全篇的联系里。 微软的…

AI 数据产品化思考:让分析能力变成可售卖的数据服务

AI 数据产品化思考:让分析能力变成可售卖的数据服务

2026/7/21 0:06:35

AI 数据产品化思考:让分析能力变成可售卖的数据服务 大家好,我是朱大喜。这周一直在复盘具体的项目和技术,最后一篇聊点不一样的东西——数据产品化。做了这么多年数据分析,我发现一个规律:能卖出去的从来不是"分…

基于人机协作的 AI 研发新体系架构:从 Harness 工程到 Loop 工程实践

基于人机协作的 AI 研发新体系架构:从 Harness 工程到 Loop 工程实践

2026/7/21 0:06:35

本文完整呈现了企业级 AI Coding 落地的核心方法论:从 Harness 工程的微观/宏观定义,到 Loop 工程的六大构建模块,再到基于 SDD(规范驱动开发)的工程化落地路径。干货较多,建议收藏细读。 我从 22 年开始就…