fork
呼び出しを実行して新しいプロセスを作成するときに、成功すると0
(子)または親。
私はこれの背後にあるアイデアを思いつきませんでした。なぜfork
は常にchild
を返すのか、常にparent
を返さないのですか?
fork()
を実行すると、実行中のコードが2つのプロセスで実行されていることがわかります(フォークが成功した場合)。一方のプロセスが親プロセスで、もう一方のプロセスが子プロセスです。 fork()
は、子プロセスでは0を返し、親プロセスでは子pidを返します。これは完全に確定的です。
これにより、fork()
の後に、親と子のどちらで実行しているかを判断できます。 (また、親が子pidを知る方法—ある時点でそれを待つ必要があります。)
もう少し詳しく:
fork()
を呼び出します。fork()
は、子プロセスに0を返します。子プロセスは継続して、その情報を使用して、自分が子であると判断します。fork()
は、子pidを親プロセスに返します。親プロセスは続行し、その情報を使用して、それが親であると判断します。fork()
システムコールは、「2回戻る」、常に(失敗しない限り)。親では、子プロセスのPIDを返し、子ではゼロを返します。
通常の流れは
pid_t pid;
int status;
pid = fork();
if (pid == 0) {
run_child_stuff();
exit(0);
} else if (pid > 0) {
run_parent_stuff();
wait(&status); /* wait for child to exit */
} else {
/* handle failure to fork */
}
... または類似。