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() */
}