在以下代码中,
#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语句?
答案 0 :(得分:1)
如果子进程没有立即返回,那么else if语句中的条件是否总是为false然后执行else语句?
对wait
的通话是阻止通话。它会阻塞,直到孩子的状态发生变化或被信号中断。
来自http://linux.die.net/man/2/wait
州的变化被认为是:孩子被终止;孩子被一个信号拦住了;或者孩子被信号恢复了。
和
否则它们会阻塞,直到子项更改状态或信号处理程序中断调用