2013-04-20 23 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()。一旦在这个过程中没有孩子,调用简单地被忽略。