如果我们在if语句中调用fork()方法,生成的子进程是否会进入else语句中?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(void){
int c = rand() % 50;
if( c == 0 ){
int k = fork();
}
else{
printf("ELSE");
}
return 0;
}
fork()执行后,子进程是否打印“ELSE”消息?
答案1
不。
子进程会发现自己在代码中与父进程处于完全相同的位置fork()
。父进程和子进程状态的唯一区别是fork()
调用的返回值,在代码中分配给它k
(这将在父进程中保存子进程的 PID,而在子进程中它将为零)。如果fork()
发生这种情况,父母和孩子都不会达成printf()
声明。
通常的做法fork()
是
pid_t pid;
pid = fork()
if (pid == 0) {
/* child process code */
/* including exit() */
} else {
/* parent process code */
/* including waitpid() or wait() */
}