进程控制
- fork()执行完之后,返回值为什么父进程和子进程的pid变量会不同返回值?
当 fork() 被调用时,操作系统会创建一个与父进程几乎相同的子进程,子进程会从 fork() 返回的位置开始执行。
在子进程中,fork() 返回值为 0,表示它是新创建的进程。
在父进程中,fork() 返回子进程的 PID,表示它是父进程,并且有能力管理子进程。
- 进程退出有三种:
- 代码运行完毕,结果正确
- 代码运行完毕,结果不正确
- 代码异常终止
-
printf的数据存在缓冲区内,exit()终止进程会主动刷新缓存区,_exit()不会刷新缓冲区。
-
回收子进程的资源(防止僵尸进程)
当子进程结束时,操作系统不会立即释放它占用的资源(如退出状态等),直到父进程调用 wait() 或相关函数来获取子进程的状态。如果父进程没有及时调用 wait(),子进程虽然退出了,但仍然在系统中保留一些信息(如 PID 和退出状态),这种未完全释放的子进程被称为僵尸进程(Zombie Process)。
调用 wait() 的主要作用之一就是回收子进程的资源,防止子进程变成僵尸进程。父进程通过 wait() 可以:
- 获取子进程的退出状态。
- 从操作系统中移除子进程的条目,释放子进程占用的资源。
- 获取子进程的退出状态
wait() 的另一个作用是获取子进程的退出码和终止状态。父进程通过 wait() 函数可以知道子进程是正常结束,还是由于某些错误或者信号被终止。
wait() 的返回值包含了子进程的退出信息。
使用宏 WIFEXITED(status) 可以判断子进程是否正常退出。
使用宏 WEXITSTATUS(status) 可以获取子进程的退出码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)