wait

waitは、プロセスの終了などの状態変化を待つUNIXシステムコール・・・。

Man page of WAIT

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を出力している・・・。

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