Linux之进程--进程控制
📅 2026/7/29 11:49:21
👁️ 次浏览
在操作系统中进程控制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和一些信息
1. Claude Code隐写术事件概述2026年6月30日,开发者社区爆出震惊业界的消息:Anthropic公司在其开源的AI编程助手Claude Code中植入了隐写术逻辑。这一发现由开发者Adnane Khan在逆向分析v2.1.91版本二进制文件时揭露,相关技术报告迅速在GitHu…
📅 2026/7/30 7:40:23
1. TypeScript本地化编译的技术突破2026年TypeScript生态迎来重大革新——开发者终于能够将TS代码直接编译为本地可执行文件,彻底摆脱JavaScript运行时的束缚。这一突破性进展主要基于三大核心技术:SWC编译链:由Rust编写的高性能TypeScript/J…
📅 2026/7/23 12:54:49
1. RAG技术全景解析:从概念验证到生产落地的完整路径 检索增强生成(Retrieval-Augmented Generation)技术正在重塑AI应用开发范式。作为大模型时代的关键基础设施,RAG通过将信息检索与文本生成能力相结合,有效解决了传…
📅 2026/7/23 1:26:03
说实话,刚开始搞跨境那会儿,我是真有点头大。每天睁眼就是时差、语言、还有那一堆乱七八糟的合规问题,搞得我头发都快掉光了。那时候我就在想,要是能有个靠谱的工具或者平台,能帮我把这些杂七杂八的事儿理顺了,该多省心啊。后来朋友给我安利了geo365online.cn,我抱着半信…
📅 2026/7/30 7:41:00
1. 项目概述:从赛题到解题的完整拆解 2021年的全国大学生数学建模竞赛C题,题目是“生产企业原材料的订购与运输”,这是一个典型的运筹优化与数据分析结合的题目,对参赛者的建模能力、编程实现和论文写作都提出了很高的要求。问题一…
📅 2026/7/30 7:40:41
1. SSM选课系统项目概述 这个基于SSM框架的选课系统源码,是我在指导计算机专业毕业设计过程中反复打磨的一个经典案例。不同于市面上那些东拼西凑的"毕业设计代做"项目,这个40122号源码从数据库设计到前端交互都遵循企业级开发规范,…
📅 2026/7/30 7:40:41
1. 项目概述:为什么RelativeLayout依然是Android布局的“定海神针”? 在Android开发的世界里,布局就像盖房子的图纸,决定了每个UI组件(砖瓦)应该放在哪里。从早期的LinearLayout、RelativeLayout࿰…
📅 2026/7/30 7:40:41
1. 项目概述:为什么DLL导出是C开发者的必修课 在Windows平台上摸爬滚打多年的C开发者,几乎没人能绕开DLL(动态链接库)这道坎。无论是为了模块化设计、代码复用,还是为了实现插件化架构,DLL都是核心的技术载…
📅 2026/7/30 7:40:41
1. 项目缘起:从“能玩”到“好玩”的扫雷进化之路 几年前,当我第一次用C语言实现扫雷时,那个版本充其量只能算个“教学演示版”。它具备了扫雷的基本规则:布雷、插旗、点开格子。但玩起来总感觉少了点什么——点开一个空白格子后&…
📅 2026/7/30 7:40:41
本文关键词:geo2是共价化合物哎,说实话,每次看到化学题里那些弯弯绕绕的电子式,我就头大。特别是遇到那种非要让你判断是离子还是共价的,心里就发毛。今天咱不整那些虚头巴脑的定义,就聊聊二氧化硅,也就是大家常说的硅石、石英,很多人会误写成geo2,虽然化学式不对,但…
📅 2026/7/30 0:00:24
B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…
📅 2026/7/30 0:00:26
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer
您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…
📅 2026/7/30 0:00:26
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/30 1:16:07
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/30 1:16:07
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/30 1:16:07
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/30 7:16:27
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/29 17:15:46
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/30 5:16:22