forkは、プロセスを複製して、新たなプロセスとして実行するUNIXシステムコール・・・。
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つに分岐している・・・。