C语言多进程创建和回收

news/2025/10/29 10:08:16/文章来源:https://www.cnblogs.com/ll55522201/p/19173502

一、多进程创建和回收

  • 孤儿进程:父进程先退出了,子进程没有退出,成为孤儿进程,父进程变成1号进程。
  • 僵尸进程:父进程没有退出,子进程退出了,但是父进程没有回收子进程资源,导致子进程变成僵尸进程。

1. fork()

创建子进程函数,一个进程可以创建多个子进程。

pid_t fork(void)
返回值小于0 创建失败等于0 是子进程大于0 是父进程
 
 

示例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>int main()
{pid_t ret = fork();if (ret < 0){perror("fork error");return -1;}else if (ret > 0){printf("here is father,pid is [%d], child pid is [%d]\n", getpid(), ret);sleep(1);}else if (ret == 0){printf("here is child pid is [%d],father is [%d]\n", getpid(), getppid());}return 0;
}
 
 

2. wait()

父进程回收子进程,其中分为wait()和waitpid()函数

pid_t wait(int *status);
返回值大于0 返回值为回收的进程id返回-1 回收失败参数 status 进程回收状态可以使用下面的宏来说明当前的回收状态WIFEXITED(wstatus) 如果正常返回,返回trueWEXITSTATUS(wstatus) 用于输出正常返回的状态 用 %d 格式化输出WIFSIGNALED(wstatus) 如果被信号杀死,返回trueWTERMSIG(wstatus) 用于输出被哪个信号杀死 用 %d 格式化输出WIFSTOPPED(wstatus) 如果子进程停止了,返回trueWSTOPSIG(wstatus) 用于输出进程停止是由于哪个信号WIFCONTINUED(wstatus) 如果进程被信号SIGCONT重启,返回trueWCOREDUMP(wstatus) 如果子进程发生核心转储,返回true
 
 

示例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>// pid_t wait(int *status);int main()
{pid_t ret = fork();if (ret < 0){perror("fork error");return -1;}else if (ret > 0){int waitstatus;printf("here is father,pid is [%d], child pid is [%d]\n", getpid(), ret);pid_t waitid = wait(&waitstatus);if (waitid == -1){perror("wait error");return -1;}else if (waitid > 0){printf("child pid [%d] is over\n", waitid);}if (WIFEXITED(waitstatus)){printf("exited, status=%d\n", WEXITSTATUS(waitstatus));}else if (WIFSIGNALED(waitstatus)){printf("killed by signal %d\n", WTERMSIG(waitstatus));}else if (WIFSTOPPED(waitstatus)){printf("stopped by signal %d\n", WSTOPSIG(waitstatus));}else if (WIFCONTINUED(waitstatus)){printf("continued\n");}}else if (ret == 0){printf("here is child pid is [%d],father is [%d]\n", getpid(), getppid());}return 0;
}//输出
here is father,pid is [24290], child pid is [24291]
here is child pid is [24291],father is [24290]
child pid [24291] is over
exited, status=0
 
 

3. waitpid()

waitpid中的第三个参数可以让回收进程变成非阻塞的。

pid_t waitpid(pid_t pid, int *status, int options);
返回值大于0 成功,返回的是回收的进程id等于0 返回0是因为第三个参数设置为了 WNOHANG ,等待是非阻塞的,并且这个时候没有子进程需要被回收小于0 回收失败参数 pid 进程id小于-1 :等待该数字绝对值的所在组所有子进程,例如-21328,则等待21328组内所有子进程-1 :等待所有子进程0 :等待组ID等于调用进程的组ID的子进程大于0 :等待某个子进程
参数 status 进程回收状态同wait函数的
参数 options 回收选项0 :不添加选项WNOHANG :如果没有子进程需要被回收,就立即返回WUNTRACED :如果一个子进程被停止了,就返回WCONTINUED :如果一个子进程被SIGCONT从停止转变为运行,就返回
 
 

示例:

创建多个子进程并回收它们

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>// pid_t waitpid(pid_t pid, int *status, int options);int main()
{int i = 0;for (i = 0; i < 3; i++){pid_t ret = fork();if (ret < 0){perror("fork error");return -1;}else if (ret > 0){printf("here is father,pid is [%d], child pid is [%d]\n", getpid(), ret);// pid_t waitid = wait(&waitstatus);}else if (ret == 0){sleep(3);printf("here is child [%d] pid is [%d],father is [%d]\n", i, getpid(), getppid());break;}}if (i == 3){int waitstatus;int num = 0;do{pid_t waitid = waitpid(-1, &waitstatus, WNOHANG);if (waitid == -1){perror("wait error");return -1;}else if (waitid > 0){printf("child pid [%d] is over\n", waitid);num++;}else if (waitid == 0){// 没有进程被回收,可以做其他事情sleep(1);continue;}if (WIFEXITED(waitstatus)){printf("[%d] exited, status=%d\n", waitid, WEXITSTATUS(waitstatus));}else if (WIFSIGNALED(waitstatus)){printf("[%d] killed by signal %d\n", waitid, WTERMSIG(waitstatus));}else if (WIFSTOPPED(waitstatus)){printf("[%d] stopped by signal %d\n", waitid, WSTOPSIG(waitstatus));}else if (WIFCONTINUED(waitstatus)){printf("[%d] continued\n", waitid);}if (num == i){break;}} while (1);}return 0;
}
//输出
here is father,pid is [24553], child pid is [24554]
here is father,pid is [24553], child pid is [24555]
here is father,pid is [24553], child pid is [24556]
here is child [0] pid is [24554],father is [24553]
here is child [2] pid is [24556],father is [24553]
here is child [1] pid is [24555],father is [24553]
child pid [24554] is over
[24554] exited, status=0
child pid [24555] is over
[24555] exited, status=0
child pid [24556] is over
[24556] exited, status=0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/949556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年长沙除甲醛公司权威推荐榜单:甲醛检测/办公室除甲醛/新房测甲醛源头服务商精选

随着公众对环境健康重视程度的日益提升,长沙室内空气治理行业近年来呈现出专业化与规范化的发展趋势。甲醛作为主要的室内空气污染物,其检测与治理服务已成为新房装修、办公室启用等场景下的重要环节。据行业内部统计…

2025年口碑好的床垫面料行业内知名厂家排行榜

2025年口碑好的床垫面料行业内知名厂家排行榜 随着消费者对睡眠质量要求的提升,床垫面料的功能性与舒适性成为选购核心指标。2025年,具备抗菌、透气、环保等特性的高端面料需求激增,行业竞争日趋激烈。本文基于市场…

达梦数据库-人大金仓数据库参考手册

---------------------------------达梦------------------------------------------ https://www.dameng.com/ https://eco.dameng.com/document/dm/zh-cn/pm/index.html https://www.sqlark.com/ ------------------…

2025年质量好的大型工业压榨机最新TOP品牌厂家排行

2025年质量好的大型工业压榨机最新TOP品牌厂家排行 在工业制造、环保处理、食品加工等领域,大型工业压榨机是不可或缺的关键设备,广泛应用于浆渣脱水、固液分离、物料提取等工艺。随着技术的不断进步,市场对高效、…

【GIS】常见网格集

常见瓦片矩阵集的Y轴方向网格集类型 规范 / 示例 Y 轴方向(Row 增长) 原点位置 级别 1 瓦片个数 (W x H) 描述Google/Bing/WMTS 默认 EPSG:3857 (Web Mercator) 向下递减 (Top-Down) 左上角 (Min X,Max Y) 2*2=4 Ro…

2025年评价高的充磁夹具厂家最新权威推荐排行榜

2025年评价高的充磁夹具厂家最新权威推荐排行榜 在工业制造、电子设备、汽车制造、医疗设备等领域,充磁夹具作为磁化工艺中的关键设备,其性能和质量直接影响产品的磁化效果和生产效率。选择一家技术先进、服务优质、…

2025年化工造粒机生产厂家权威推荐:永磁材料造粒机/PC改性造粒机/彩色母造粒机源头厂家精选

化工造粒机作为化工生产过程中的核心设备,以其成型效率高、颗粒均匀度好、自动化程度高等优势,在肥料、医药、染料、塑料等行业得到广泛应用。随着化工行业向精细化、绿色化方向转型,市场对高性能造粒设备的需求持续…

提升企业效率的优质文件同步软件推荐

在当今数字化环境中,文件同步软件的角色愈发重要,它帮助企业实现高效的数据管理与协作。通过使用文件同步软件,企业可提高数据的可访问性与安全性。此外,这类软件支持多用户同时访问和编辑文件,保证了信息的一致性…

2025年质量好的硬齿面减速机实力厂家TOP推荐榜

2025年质量好的硬齿面减速机实力厂家TOP推荐榜 在工业自动化与机械传动领域,硬齿面减速机凭借其高承载能力、长寿命和稳定性能,成为众多企业的首选。2025年,随着制造业智能化升级,市场对高质量减速机的需求持续增…

2025年10月无缝钢管推荐榜:五家主流厂商对比与排名

进入2025年第四季度,国内基建、能源、化工项目集中开工,无缝钢管进入年度采购高峰。用户普遍面临“材质牌号多、标准版本新、交货周期紧、价格浮动大”四大痛点:设计院图纸一更新,GB 6479-2018高压化肥管与GB 5310…

2025年靠谱的成都中空板厂家最新用户好评榜

2025年靠谱的成都中空板厂家最新用户好评榜 在当今快速发展的包装行业中,中空板因其轻便、耐用、环保等特性,广泛应用于光伏、新能源、电子包装等领域。成都是中国西部重要的制造业基地,拥有众多专业的中空板生产厂…

2025 年廊坊门窗厂家最新推荐:香河 / 大厂系统窗、断桥铝及封阳台门窗精选榜单

引言 门窗是家居安全与舒适的核心屏障,其品质直接影响居住体验与能源消耗。据建筑金属结构协会 2024 年度测评数据显示,廊坊地区门窗产品合格率仅为 78.3%,部分产品存在型材厚度不达标、密封性能差等问题,导致用户…

2025年靠谱的净化铝材TOP品牌厂家排行榜

2025年靠谱的净化铝材TOP品牌厂家排行榜在当今建筑和工业领域,净化铝材因其优异的耐腐蚀性、轻量化特性和美观度而广受欢迎。随着环保要求的提高和建筑标准的升级,市场对高品质净化铝材的需求持续增长。本文将为您推…

跨网文件安全交换系统有哪些特点与优势解析

跨网文件安全交换系统在现代企业中逐渐成为数据安全传输的重要工具。其主要特点包括高安全性、可靠性和高效性。通过端到端加密技术,系统能够确保数据在发送过程中不被非法访问,从而保护敏感信息。同时,系统内的病毒…

2025年知名的异型管缩管机。厂家最新实力排行

2025年知名的异型管缩管机厂家最新实力排行异型管缩管机行业概述异型管缩管机作为电热设备制造领域的核心装备,在2025年迎来了技术革新的高峰期。随着全球制造业对精密管件需求的持续增长,异型管缩管机的市场价值预计…

2025 年天津门窗源头厂家最新推荐榜:五大实力品牌测评出炉,含华建铝材合作商及地标项目供应商

引言 2025 年天津门窗市场规模持续扩大,但产品质量参差不齐的问题仍较突出。据建筑金属结构协会最新测评数据显示,市场上约 35% 的门窗产品在隔音、隔热性能上未达国家 GB/T 8478-2020 标准,28% 的厂商存在交付周期…

2025年10月护眼台灯品牌推荐榜:优视光领衔全维度对比评测

开学季刚过,不少家长发现孩子写作业时频繁揉眼、凑近书本;加班族也反馈,深夜对着电脑屏幕后眼干酸胀。国家卫健委2024年监测显示,我国儿童青少年总体近视率仍达52.7%,成人视疲劳患病率升至58%,“光环境不良”被《…

2025年钢结构厂房优质厂家权威推荐:二手钢构库房/钢结构库房/二手车间源头厂家精选

在产业升级与绿色建筑政策双轮驱动下,中国钢结构厂房市场正迎来新一轮发展机遇。 钢结构厂房作为现代工业建筑的核心形式,以其施工周期短、抗震性能好、环保可回收等优势,在工业建筑领域占据重要地位。据中国钢结构…

2025年靠谱的齿轮齿条提升机厂家推荐及选购指南

2025年靠谱的齿轮齿条提升机厂家推荐及选购指南引言齿轮齿条提升机作为现代工业生产中不可或缺的垂直输送设备,广泛应用于食品、医药、化工、电子、物流等多个行业。随着工业4.0和智能制造的快速发展,市场对提升机的…

如何提高内外网文件传输效率:企业数字化转型的关键突破点

在数字化转型深度推进的当下,内外网文件传输已成为企业业务运转的“核心血脉”,贯穿供应链协同、跨部门数据共享、客户需求响应、研发成果交付等关键场景,直接决定业务响应速度与战略决策效率。对于企业而言,跨网传…