2013-02-22 40 views
-3

問題答:叉 - 如何既父和子運行,即使它是一個,如果其他

考慮下面的代碼,我明白,當你調用一個岔路口,最如果資源被轉給孩子處理。現在幾乎每一個我看過的福克例子都像我擁有的​​那樣。從它的外觀來看,我不明白父進程是如何被調用的,因爲它在else塊中。

問題B:

在孩子理線代碼被執行後,它會自動知道它現在已經進入父進程?在其他例子中,我也看到了一個等待(NULL),如果它正在進入else塊,那麼等待的角色是什麼。假設我想要執行同一個父進程的兩個子進程,這兩個進程是否並行運行,然後在完成後運行父進程的代碼?謝謝。

#include <stdio.h> 
#include <unistd.h> 

int main() 
{ 
     pid_t pid; 
     pid = fork(); 

     if(pid == 0){ 
       printf("Hello World"); 
     } 
     else{ 
       printf("Hello World"); 
     } 
     return 0; 
} 
+7

要學習的經驗:fork()被調用一次,但它返回兩次。父母和孩子是不同的過程。 – wildplasser 2013-02-22 23:29:29

+2

您是否意識到fork會導致**兩個並行執行的進程?一個是父母,一個是孩子。 – 2013-02-22 23:30:09

+0

你是什麼意思返回兩次?我很難想象這是如何工作的 – markfiel 2013-02-22 23:30:17

回答

5

你有點誤解了我的想法。 fork()克隆進程,這意味着父進程和子進程都被執行,並且它們在其代碼中具有相同的if-else(因爲它們從fork()下來運行相同的代碼)。

孩子的進程ID是0,所以它會進入if,父進程ID不是0,所以它會進入else。這是一種讓進程分別執行自己的事情的方法,即使它們具有相同的代碼。

+0

我有一個printf在孩子,它打印,然後我有一個printf在父,但沒有運行。 – markfiel 2013-02-22 23:35:36

+0

'printf'語句到底在哪裏? – 2013-02-22 23:36:16

+0

檢查編輯,謝謝。 – markfiel 2013-02-22 23:37:16

相關問題