C小程式 fork理解

2021-06-28 02:34:00 字數 999 閱讀 5737

#include

#include

#include

int main(void)

return 0;

}1. 總共生成了幾個程序?

答: 4個。可以在return 0;之前加乙個sleep(100), 然後通過 pstree -p | grep fork檢視

$ pstree -p | grep fork

|              |-bash(14207)-+-fork(23392)-+-fork(23393)---fork(23395)

|              |             |             `-fork(23394)

14207是bash程序

可以看到,第一次迴圈的時候,程序23392生成了乙個子程序23393, 然後第二次迴圈的時候,23392的程序又生成了乙個子程序23394,同時,之前的子程序23393又生成了乙個孫程序23395

2. 總共列印幾個「-」;

答:8個。這裡要考慮緩衝區的概念。解釋如下:

第一次迴圈後,父子程序分別執行printf("-"), 但是由於沒有("\n"), 所以並不直接輸出,而是把"-"放入各自程序的緩衝區,這樣就有了2個"-"

第二次迴圈後,父程序又生成第二個子程序,然後又分別執行printf("-"), 但是由於沒有("\n"), 所以並不直接輸出,而是把"-"放入各自程序的緩衝區,這樣就有了2個"-",

但是這時候注意,生成的第二個子程序繼承了父程序的緩衝區,所以第二個子程序中還會有乙個"-", 這時候總共就是5個"-"

同時,第二次迴圈後,子程序生成了孫程序,如上所述,這個子程序和孫程序總共也有2 + 1(孫程序繼承而來) = 3 個"-"。

這樣 「-」 總共有 5+3=8

3. 如果是printf("-\n"),那麼會列印幾個"-"?

答:6個,因為有\n,所以每次printf都會把資料刷出緩衝區,列印出來。

0

給主人留下些什麼吧!~~

fork 的使用理解

查詢fork 函式有以下幾種返回值 1.在父程序中,fork返回新建立子程序的程序id 2.在子程序中,fork返回0 3.如果出現錯誤,fork返回乙個負值。總是不理解進行試驗驗證 include include include include includeint main int argc,i...

理解執行緒的小程式

在看 beginning linux programming 時,為了更好的理解執行緒的概念,書中列舉了這樣乙個小例子 include include include include include void thread function void arg char message hello w...

fork 函式 自己的理解

大家都知道fork 函式生成和原程序完全相同的子程序。父程序返回子程序的pid,子程序返回0.同時要注意一點fork 不象執行緒需提供乙個函式做為入口,fork 後,子程序的入口就在 fork 的下一條語句。因此如下函式 我見過的一道筆試題 void func 問題是呼叫此函式,會列印多少 注意子程...