在看Linux源代码时,遇到的fork()函数实在是太奇怪了,调用一次,竟然会对子进程和父进程分别返回两个不同的值,令人费解,一个函数怎么会有两个返回值呢。终于找到了答案。如下:
fork()并不是进行进程切换,而是复制一个当前进程。举例来说,假如初始进程号为100,当进入fork()系统调用后,操作系统就把100号进程一模一样地复制出来一个新的进程101号。所谓一模一样,是指100号进程与101号进程所包含的任何信息,例如变量的值,空间分配,特别是正在执行的语句等等都相同。这时你的一套代码便同时在这两个进程中执行,就象一个EXE文件被同时执行了两次一样。由于两个进程下一步要执行的语句都是从fork()返回,这时操作系统就特意让100号进程中的fork()返回101,而101号进程中的fork()返回0,这样一套代码就能够分辨清楚到底是处在哪个进程中了。