2013-04-20 37 views
0

所以我在修改期間看到了下面的代碼。我知道wait()會導致父母等待孩子停下來,但我對此有幾個問題。wait()系統調用 - 孩子是否忽略這個?

首先,當孩子被創建時,我的假設是否糾正父繼續,更改x值,然後在if語句後等待?

其次,當孩子進行執行並等待()時,會發生什麼?這是因爲它沒有什麼可等待而被忽略?

 #include <sys/types.h> 
     #include <stdio.h> 
     #include <unistd.h> 
     int main() { 
     int x = 1; 
      pid_t pid = fork(); 
     if (pid == 0) { 
      x = x * 2; 
     } else if (pid > 0) { 
      x = 3; 
     } 
     wait(); 
     // Print the value of x to the console 
     printf("%d\n",x); 
     } 
+0

你試過了嗎?該程序似乎是掛起(關於你的第二個問題)? – 2013-04-20 00:39:32

+0

是的(關於你的第一個問題)。 – 2013-04-20 00:49:48

+0

['wait()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html)的聲明是'pid_t wait(int * stat_loc)',並且它被允許通過0或NULL代替指針,你必須傳遞一些東西作爲參數。當然,你需要'#include '包含在編譯器中才能警告你 - 但你不應該編譯代碼,以便你可以在範圍內使用沒有原型的函數。在當前的POSIX系統中,你不需要'#include '(它自動包含;它在原來的POSIX-1988,1990中是必需的)。 – 2013-04-20 02:20:06

回答

0

您可以在子執行開始時嘗試調用wait()。一旦在這個過程中沒有孩子,調用簡單地被忽略。