2012-03-19 64 views
1

可能重複:
Unix fork() system call what runs when?c中的fork()命令 - 這段簡單的代碼的輸出是什麼?

我看了看維基百科和文章稱,「fork()系統調用的目的是創建一個新的進程,成爲孩子進程調用者,之後父進程和子進程將執行fork()系統調用之後的代碼。因此,區分父進程和子進程很重要,可以通過測試返回值fork()系統調用「。

在這種情況下,這是什麼代碼執行:

printf("This is a fork!"); 
fork(); 

給出的描述,它看起來像它會說:「這是一個叉!」只是一次,因爲在fork()語句之後什麼都沒有。但是,當我在linux盒子上測試這個時,它打印出「This is a fork!」兩次。那它是哪一個?

謝謝。

回答

8

printf的輸出被緩衝;兩個子進程都獲得了緩衝區的副本;當每個子進程退出時,緩衝區被刷新兩次。

1

printf已經緩衝其輸出以供稍後顯示。後來碰巧在fork之後,所以你看到它兩次。

printf("..."); 
fflush(stdout); 
fork(); 

替換爲您的代碼片段