手机网站开发公司电话北京网站制作公司报价

张小明 2026/1/11 7:20:56
手机网站开发公司电话,北京网站制作公司报价,蓝色网站素材,高端室内设计在 Linux C/C 开发中#xff0c;进程管理是系统编程的核心知识点之一。从父子进程的创建、进程的终止到僵尸进程的避免#xff0c;每一个环节都影响着程序的稳定性。本文将从基础概念到实践代码#xff0c;详细讲解 Linux 进程管理的关键技术。一、父子进程#xff1a;写时…在 Linux C/C 开发中进程管理是系统编程的核心知识点之一。从父子进程的创建、进程的终止到僵尸进程的避免每一个环节都影响着程序的稳定性。本文将从基础概念到实践代码详细讲解 Linux 进程管理的关键技术。一、父子进程写时复制的 “副本关系”当我们通过fork()创建子进程时子进程是父进程的 “复制副本”—— 但在现代 Linux2.6 版本后如 Ubuntu 18.04 使用的 Linux 5.4 内核中这个 “复制” 并非完全拷贝而是采用了 ** 写时复制Copy-on-WriteCOW** 机制初始状态子进程与父进程共享同一块内存空间包括代码段、数据段、堆、栈内核仅为子进程创建独立的 PCB进程控制块。写操作触发拷贝当子进程修改某块内存如变量、数组时内核才会为子进程分配新的内存空间并将修改的内容拷贝到新空间中实现 “按需拷贝”。这种机制既节省了内存资源又提升了fork()的效率。二、进程的终止8 种情况分类进程的终止分为 “正常终止” 和 “异常终止” 两类共 8 种场景终止类型具体场景说明正常终止1.main函数中执行return会触发进程退出返回值作为进程退出状态2. 调用exit()函数库函数会执行 I/O 清理刷新缓存、关闭打开的文件再终止进程3. 调用_Exit()函数系统调用仅关闭打开的文件不执行 I/O 清理缓存数据会丢失4. 主线程退出主线程结束后进程会随之终止5. 主线程调用pthread_exit仅主线程退出进程不会终止需所有线程结束异常终止6. 调用abort()函数触发SIGABRT信号强制进程终止7. 通过signal/kill发送终止信号如kill -9 pid强制杀死进程8. 最后一个线程被pthread_cancel取消所有线程结束后进程终止三、退出后的进程僵尸与孤儿进程退出后并非直接 “消失”而是会进入特殊状态1. 僵尸进程Zombie Process产生条件父进程创建子进程后子进程先退出但父进程未调用wait/waitpid回收子进程。表现子进程的用户内存已释放但内核中的 PCB包含进程 PID、退出状态等未被释放进程状态标识为Z可通过ps aux | grep Z查看。危害长期积累的僵尸进程会占用内核内存导致系统资源不足、稳定性下降。2. 孤儿进程Orphan Process产生条件父进程创建子进程后父进程先退出子进程会被系统进程如init、systemd接管。表现子进程的新父进程会自动回收其资源因此孤儿进程不会造成资源泄漏无需额外处理。四、进程退出函数exit 与_exit 的区别进程退出的核心函数是exit库函数和_exit系统调用二者的差异是面试高频考点函数类型核心行为适用场景exit(int status)库函数1. 执行atexit注册的清理函数2. 刷新 I/O 缓存3. 关闭打开的文件4. 调用_exit终止进程需保证数据完整写入如文件操作后_exit(int status)系统调用1. 关闭打开的文件2. 直接终止进程不处理缓存 / 清理函数紧急退出如信号处理函数中示例c运行#include stdio.h #include stdlib.h #include unistd.h int main() { printf(使用exit退出会刷新缓存); exit(EXIT_SUCCESS); // 输出会被打印 } // 对比 int main() { printf(使用_exit退出不刷新缓存); _exit(EXIT_SUCCESS); // 输出不会被打印缓存未刷新 }五、进程回收wait/waitpid 解决僵尸问题为了避免僵尸进程父进程必须主动回收子进程核心函数是wait和waitpid。1. wait 函数c运行pid_t wait(int *status);功能阻塞等待任意一个子进程退出并回收其 PCB。参数status存储子进程的退出状态若不需要传NULL。返回值成功返回被回收子进程的 PID失败返回-1如无待回收子进程。解析退出状态需通过宏函数提取status中的信息WIFEXITED(status)判断子进程是否正常退出返回非 0 表示正常。WEXITSTATUS(status)提取子进程的退出值仅当WIFEXITED为真时有效。WIFSIGNALED(status)判断子进程是否被信号终止。WTERMSIG(status)提取终止子进程的信号编号。2. 实践代码回收子进程并处理退出状态c运行#include stdio.h #include stdlib.h #include unistd.h #include sys/wait.h int main() { pid_t pid fork(); if (pid -1) { perror(fork失败); exit(1); } if (pid 0) { // 子进程执行任务后退出 printf(子进程(pid%d)执行中...\n, getpid()); sleep(2); exit(5); // 正常退出退出值为5 } else { // 父进程回收子进程 int status; pid_t child_pid wait(status); if (child_pid -1) { perror(wait失败); exit(1); } // 解析退出状态 if (WIFEXITED(status)) { printf(回收子进程(pid%d)退出值%d\n, child_pid, WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { printf(回收子进程(pid%d)被信号%d终止\n, child_pid, WTERMSIG(status)); } } return 0; }运行结果plaintext子进程(pid12345)执行中... 回收子进程(pid12345)退出值53. 批量回收waitpid 循环处理多子进程若父进程创建了多个子进程需循环调用waitpid回收所有子进程c运行// 循环回收所有子进程 while (waitpid(-1, status, WNOHANG) 0) { // 处理退出状态... }waitpid(-1, status, WNOHANG)-1表示回收任意子进程WNOHANG表示非阻塞无待回收子进程时直接返回 0。六、实战如何查看僵尸进程通过ps或top命令可查看系统中的僵尸进程ps 命令bash运行ps aux | grep Z输出中状态为Z的进程即为僵尸进程。top 命令进入top后按z可高亮显示僵尸进程或查看 “Zombie” 统计项若大于 0说明存在僵尸进程。总结Linux 进程管理的核心是 “创建 - 终止 - 回收” 的闭环用fork()创建子进程利用写时复制节省资源子进程通过exit/_exit正常退出或被信号异常终止父进程必须通过wait/waitpid回收子进程避免僵尸进程孤儿进程由系统接管无需额外处理。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做网站抽奖系统新北做网站

聚类算法在MNIST和借贷俱乐部数据中的应用 1. 层次聚类在MNIST数据集上的表现 层次聚类在MNIST数字数据集上表现出色,且整个过程未使用任何标签。在实际应用中,通常先进行降维(如PCA),再进行聚类(如层次聚类),最后对每个聚类中的少量点进行手动标注。以MNIST数据集为…

张小明 2026/1/7 20:25:30 网站建设

湛江app开发公司呼和浩特整站优化

HsMod插件配置终极指南:快速上手炉石传说优化工具 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod插件配置是每位炉石传说玩家都应该掌握的重要技能。这款基于BepInEx框架开发的…

张小明 2026/1/7 20:25:33 网站建设

临沂房产和房建设局网站双和wordpress 常见漏洞

目录具体实现截图项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理具体实现截图 本系统(程序源码数据库调试部署讲解)带文档1万字以上 同行可拿货,招校园代理 Thinkphp和Laravelpython桂平旅游管理系统vue 项目开发技…

张小明 2026/1/7 20:25:35 网站建设

高校廉洁文化建设网站电子设计工程官网

Linux内核概念:Per-CPU变量与CPU掩码详解 1. Per-CPU变量 Per-CPU变量是Linux内核的一个重要特性,每个处理器核心都拥有该变量的独立副本。 1.1 创建Per-CPU变量 内核提供了 DEFINE_PER_CPU 宏来创建Per-CPU变量,其定义如下: #define DEFINE_PER_CPU(type, name) \…

张小明 2026/1/10 14:22:52 网站建设

羽毛球赛事2023赛程seo优化一般优化哪些方面

DBeaver SQL编辑器代码模板变量循环功能实战指南 【免费下载链接】dbeaver 项目地址: https://gitcode.com/gh_mirrors/dbe/dbeaver 你是否曾经在编写大量相似SQL语句时感到疲惫不堪?每次都要手动修改表名、列名,重复着相同的操作模式&#xff1…

张小明 2026/1/9 17:28:28 网站建设

芜湖网站建设公司站长工具星空传媒

Kotaemon支持答案来源高亮显示,增强可信度在企业级AI应用日益普及的今天,一个核心问题始终困扰着用户:我们真的能相信AI给出的答案吗?尤其是在法律、金融、医疗等对准确性要求极高的领域,一句未经验证的回复可能带来严…

张小明 2026/1/7 20:25:45 网站建设