前面,简单学习了fork函数。再测试fork函数的时候,使用了一个sleep函数来延时,以在较大程度上让子进程先运行结束。那么,有没有什么方式可以保证子进程先执行完父进程再执行呢?其实是有的,这就是这次要简单测试的wait函数。
之前的代码修改如下:

代码编译运行结果:

从输出结果看,第一次执行printf的进程的父进程pid是9240,而这个正好是第二次执行printf的进程pid。由此可以看出,尽管子进程睡眠了2秒钟,但是还是子进程先执行完的。做一个对比测试的话,可以把wait去掉,编译后运行三次的效果:

这个结果很有意思,以我目前掌握的知识信息来看还不能够做到完整的解析。不过,我觉得可能是在父子进程运行完成前后,切入到了shell的原因导致。毕竟从行为上看,我们看到了命令行输入等待的情况。至于pid为什么多了1,暂时也说不清楚,可能是这个shell的变化其实是增加了一个进程?不过,这个过程还是很有趣的,也更让我清楚了wait设计的一些意图了。
















