1.进程的创建
fork()函数是创建子进程的函数,在主函数中调用fork会产生一个子进程
打印出来的结果是:
if语句是条件语句但却两个都打印了,两个条件都满足,也就是说两个都执行,但却不是一条执行流,那么可以得出肯定还有一个进程在打印另一个。都记得fork()之后有两个进程,一个父进程,一个子进程,父进程返回子进程的pid,子进程返回0;也就是说调用一次返回两次。
有没有发现 我在父进程执行时加了wait()函数,因为fork函数在创建子进程时,并不能确定是子进程先运行还是父进程先运行,防止子进程成为僵死进程(进程主体结束,但其pcb没有释放),所以在父进程中调用wait函数,让其阻塞,等待子进程运行完毕后并获得子进程的退出状态,处理完子进程后再运行父进程,也就是同步执行。关于wait函数以及僵死进程、阻塞在后续解释。
那么fork()这个函数是怎么创建进程的呢?
其实是系统调用clone()实现fork()然后clone()再去调用do_fork(),do_fork()还不是最后的执行者最后的执行者是copy_process()这个函数&#x