【发布时间】:2016-02-02 03:42:49
【问题描述】:
在下面的代码中,
#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语句中的条件是否总是为假,然后执行else语句?
【问题讨论】:
-
计算机将评估
wait(NULL) != childpid,然后才能知道是执行第二个还是第三个fprintf。在wait返回之前,这不会完成。