int main(int argc, char* argv[]) { fork(); fork() && fork() || fork(); fork(); }
如果对以上的 fork() 调用依次编号成 1,2,3,4,5 的话,那么在调用 1 时,正常情况下,会创建一个新进程 A ,并将新进程 A 的 id 返回给原进程。原进程将继续调用剩下的 fork() 。
虽然新进程 A 的代码跟原进程一样,但新进程中调用 1 会返回 0 ,返回 0 则表示没有再创建新的进程。新进程 A 将继续调用 2 ,正常情况下将创建一个新进程 B ,并将新进程 B 的 id 返回给 A 。然后进程 A 将继续调用剩下的 fork() 函数。
新进程 B 中调用 1 和 2 都将返回 0 ,表示没有创建新进程,然后由于 && 具有短路性质,所以 B 将直接调用 4 ,正常情况下将会创建一个新进程 C ,并将进程 C 的 id 返回给 B 。然后进程 B 将继续调用剩下的 fork() 函数。