子プロセスにどのコードがコピーされますか?

子プロセスにどのコードがコピーされますか?

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を親プロセスに格納しますが、子プロセスでは0になります)。 )。このようなことが起こると、両親と子供の両方がステートメントにfork()到達しません。printf()

一般的なアプローチfork()

pid_t pid;

pid = fork()

if (pid == 0) {
    /* child process code */
    /* including exit()   */
} else {
    /* parent process code           */
    /* including waitpid() or wait() */
}

関連情報