fork创建进程

本文详细介绍了Linux下如何通过fork函数创建进程,分析了fork内部调用clone及do_fork的过程,包括创建内核栈、复制task_struct、设置进程状态、分配PID以及拷贝资源等步骤。同时,提到了wait函数在防止子进程成为僵死进程中的作用,以及为何通常让子进程先执行以优化效率。
摘要由CSDN通过智能技术生成

1.进程的创建
fork()函数是创建子进程的函数,在主函数中调用fork会产生一个子进程
在这里插入图片描述
打印出来的结果是:
在这里插入图片描述
if语句是条件语句但却两个都打印了,两个条件都满足,也就是说两个都执行,但却不是一条执行流,那么可以得出肯定还有一个进程在打印另一个。都记得fork()之后有两个进程,一个父进程,一个子进程,父进程返回子进程的pid,子进程返回0;也就是说调用一次返回两次。

有没有发现 我在父进程执行时加了wait()函数,因为fork函数在创建子进程时,并不能确定是子进程先运行还是父进程先运行,防止子进程成为僵死进程(进程主体结束,但其pcb没有释放),所以在父进程中调用wait函数,让其阻塞,等待子进程运行完毕后并获得子进程的退出状态,处理完子进程后再运行父进程,也就是同步执行。关于wait函数以及僵死进程、阻塞在后续解释。

那么fork()这个函数是怎么创建进程的呢?
其实是系统调用clone()实现fork()然后clone()再去调用do_fork(),do_fork()还不是最后的执行者最后的执行者是copy_process()这个函数&#x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值