とてもわかりやすかった。
親プロセスに待たれることなく死んでしまった子プロセスは例外なくゾンビプロセスになってしまう
(カーネルのキューに残り続ける、defunct
,Z
)Process.detach が内部的にやってくれていることは、「新しいスレッドを用意して、そこで、pid で指定された子プロセスの終了を待ち受ける」ということ。
Process.wait
は(親スレッドが)ブロックするので、ブロックしたくないならProcess.detach
その終了を意識的に待ち受け、その結果次第で親プロセスでの処理も分岐したりするようなら Process.wait だし、それがどうでもいいのなら Process.detach だ。
- ↑その == 生成した子プロセス
なるほどUnixプロセス ― Rubyで学ぶUnixの基礎 - 達人出版会を読み直すべきだなあ。Working with Unix Processes(原著)をペパボの社内読書会で読んだが、やはり英語で難しかった記憶があるので。