哪些代码被复制到子进程?

哪些代码被复制到子进程?

如果我们在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() */
}

相关内容