waitは、プロセスの終了などの状態変化を待つUNIXシステムコール・・・。
forkで生成した子プロセスが終了するまで、親プロセスは処理を待つようにしてみる・・・。
statusに子プロセスの終了に関する情報が格納される・・・。
自身が子プロセスなら、自身のプロセスIDを出力し、2秒休止・・・。
これを5回繰り返すので終わるまで10秒かかる・・・。
親プロセスは、親子のプロセス情報を出力し、1秒休止・・・。
これを5回繰り返す・・・。つまり、5秒なので親が早く終わる・・・。
本来、これで終わりだが子プロセスが終わるまでwaitで待つ・・・。
waitにはstatusのアドレスを渡しておくと、終了情報が終わった時に格納される・・・。
が、今回は使わないのでstatusは見ない・・・。
戻り値は子プロセスのプロセスIDなのでそれを出力してる・・・。
$ ./wait pid1 = 22149 I am parent!, pid3 = 22149, my child pid2 = 22150 I am child!, pid3 = 22150. I am parent!, pid3 = 22149, my child pid2 = 22150 I am parent!, pid3 = 22149, my child pid2 = 22150 I am child!, pid3 = 22150. I am parent!, pid3 = 22149, my child pid2 = 22150 I am parent!, pid3 = 22149, my child pid2 = 22150 I am child!, pid3 = 22150.
5秒経ったところで、
親プロセスは1秒ごとに1回の計5回なので、5つ出力されている・・・。
子プロセスは2秒ごとに1回の計3回出力されている・・・。(0秒後, 2秒後, 4秒後)
その後、
wait... I am child!, pid3 = 22152. I am child!, pid3 = 22152. Child process finished! child pid4 = 22152 $
"wait..."が出力されている・・・。
親プロセスの処理は終わって、あとは子プロセスを待っている状態ということ・・・。
子プロセスが残りの2つを出力し、子プロセスが終わり、最後に親プロセスがwaitを抜けて、子プロセスのIDを出力している・・・。