読者です 読者をやめる 読者になる 読者になる

fork

UNIXシステムコール Sample

forkは、プロセスを複製して、新たなプロセスとして実行するUNIXシステムコール・・・。

Man page of FORK

forkが呼ばれるとプロセスが2つになるわけだが、戻り値はそれぞれ違い、それぞれのforkの戻り値で自分が親プロセスか子プロセスかがわかる・・・。

まず、自分のプロセスIDをgetpidで取得・・・。

でforkを呼ぶ・・・。
戻り値が負の値ならエラー・・・。

戻り値が0なら、自身は子プロセス・・・。
なので、getpidで自分のプロセスを1秒ごとに出力しておく・・・。

戻り値が正の場合、親プロセスであり、戻り値は子プロセスのプロセスIDである・・・。
なので、getpidで自分のプロセスID、戻り値で子プロセスIDを1秒ごとに出力・・・。

$ ./fork
pid1 = 21747
I am parent!, pid3 = 21747, my child pid2 = 21748
I am child!, pid3 = 21748.
I am parent!, pid3 = 21747, my child pid2 = 21748
I am child!, pid3 = 21748.
I am parent!, pid3 = 21747, my child pid2 = 21748
I am child!, pid3 = 21748.
I am parent!, pid3 = 21747, my child pid2 = 21748
I am child!, pid3 = 21748.
I am parent!, pid3 = 21747, my child pid2 = 21748
I am child!, pid3 = 21748.
$

fork前のプロセスIDは21747・・・。
fork実行後に、親プロセス自身がgetpidで取得した自身のプロセスIDであるpid3は21747、その時の戻り値pid2は21748・・・。
子プロセス自身がgetpidで取得した自身のプロセスIDのpid3は21748・・・。
プロセスが2つに分岐している・・・。

Sample/fork.c at master · bg1bgst333/Sample · GitHub