int main() //輸出為hello worldhello world int main() //輸出為hello world
printf是向標準輸出(stdout)輸出你要列印的東西,而預設的stdout是line buffering,也就是以行方式快取的,這是乙個簡單的 建立子程序,然後子程序各自執行 的程式所以當你列印的東西不夠一行(沒有\n)的時候,這些資訊是儲存在stdout的buffer中,然後你fork,
這樣父程序和子程序的stdout的buffer就都包含有你沒有列印出來的內容,當這兩個程序結束的時候,b
uffer中的內容會被列印出來,這樣你就看到了兩次 hello world. 而第二個程式中,你列印的東西夠了一行(有\n結束),
所以在fork之前,資訊就被列印出來了,
fork之後父程序和子程序stdout的buffer中都是空的了,
所以你就只看到一次hello world.
解決第乙個程式的問題的方法是 printf("hello world"); fflush(stdout); //手動將stdout快取的內容列印出來。 fork();
在看之前首先思考3個問題
(1)child1,child2是child的子程序麼?
(2)紅字部分程式會執行幾次?
(3)藍字部分程式會執行幾次?
#include
#include
#include
#include
#include
int main(woid)
else if(child1==0)
if(child2==-1)
else if(child2==0)
else
}while(child==0);
if(child==child2)
printf("get child2\n");
else
printf("error occured!\n"); }}
最終 紅字部分執行了4次,藍字部分執行了2次
程式本來有乙個程序child
child1=fork();
這句話創造了1個程序,child的子程序child1
child2=fork();
這句話創造了2個程序:
child的另外乙個子程序child2;
child1的乙個子程序child2(相當於包含了child1的內容)。
因為有4個程序,所以所有不需要條件判斷的輸出語句都會執行4次
藍子部分是由child的子程序child1,child1的子程序child2各執行了一次,所以是2次
gdb 子程序 多程序 fork 除錯
標 題 faq 請問如何用gdb除錯子程序 發信站 bbs 水木清華站 mon may 19 18 17 02 2003 轉信 作個faq,在常見的x86平台上如何gdb除錯fork或者exec出來的子程序 1.在fork語句上設定斷點,修改fork返回的值。這種做法並沒有真正去 觸動已經存在的子程...
Linux中關於fork 複製程序
fork 複製程序1 fork 的基本概念 乙個現有程序可以用fork 函式通過系統呼叫建立乙個新程序,該函式定義如下 include pid t fork void 返回 若成功則在子程序中返回0,在父程序中返回子程序pid,若出錯則返回 1 因此,可以通過返回值知道當前程序是父程序還是子程序。2...
程序的基本操作,fork(),建立多程序。
fork用於新建乙個子程序,簡單的例子 include 提供open函式 include 該標頭檔案提供系統呼叫的標誌 include 該標頭檔案提供系統狀態資訊和相關函式 include 該標頭檔案提供程序i o操作的相關函式 include 標準函式庫 include 檔案操作相關函式庫 inc...