fork
关于fork函数的讲解,作者:BearPot,写的很详细了。在这里,我只简单,描述一下,用做相互验证。
fork,就和人遇到分岔路口一样,假设人有分身能力。那么就会在这个路口,分身成两个人。我不重点描述,后面要干什么,我只重点描述,在分身这个过程会干什么!
pid_t pid = fork();
在这一瞬间,它分身为二,分身1(父进程)获得“>0”的pid,分身2(子进程)获得“=0”的pid!在这里pid开始分身了!利用好这一瞬间,我们能去探索不同的路。这样讲解不太清晰,我们来一次复杂操作中。
再来分析fork() || fork():
第一个分岔,处理第一个fork
pid2下的分岔,处理第二个fork
可以发现一共有三个进程。而这里的pid2的状态为什么会改变?注意,不要去研究这东西,这个只是我用来分析这个逻辑的方式!你真正要在意的是,fork函数调用时的逻辑。
这时候在反过来,看pid_t pid = fork();,你就能明白这里的细节。
再来一个案例fork() && fork()
同样只有三个进程,看起来&&与||没什么区别,但如果使用if语句去判断,那将天差地别。当你条件布置好后,能得到意想不到的效果。自己去尝试吧!
需要注意的是,>0 的pid代表的是“子进程的pid",如:在案例**fork() && fork()**中,第一个pid1是进程2的标签,第二个pid1则是进程3的标签。这种细节可以在训练1中体现出来