在条件语句中等待函数

时间:2016-02-02 03:42:49

标签: c unix wait

在以下代码中,

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main (void) {
   pid_t childpid;
   childpid = fork();
   if (childpid == -1) {
   /* set up signal handlers here ... */
      perror("Failed to fork");
      return 1;
   }
   if (childpid == 0)
      fprintf(stderr, "I am child %ld\n", (long)getpid());
   else if (wait(NULL) != childpid)
      fprintf(stderr, "A signal must have interrupted the wait!\n");
   else
      fprintf(stderr, "I am parent %ld with child %ld\n", (long)getpid(),
           (long)childpid);
   return 0;
}

多个if else语句将如何表现?如果子进程没有立即返回,那么else if语句中的条件是否总是为false然后执行else语句?

1 个答案:

答案 0 :(得分:1)

  

如果子进程没有立即返回,那么else if语句中的条件是否总是为false然后执行else语句?

wait的通话是阻止通话。它会阻塞,直到孩子的状态发生变化或被信号中断。

来自http://linux.die.net/man/2/wait

  

州的变化被认为是:孩子被终止;孩子被一个信号拦住了;或者孩子被信号恢复了。

  

否则它们会阻塞,直到子项更改状态或信号处理程序中断调用