古すぎるジョブを消す
do_wait の中と get_jobnumber_from_pid の中とでループの回る向きが違うのも気になるがそもそも pid が使い回されるケースに対応していないから使い回されるとろくに動かない。先にそちらの方が問題になる。
使い回しの問題は r3973 で直した。
そもそも古いジョブを消さずにずっと覚えてるシェルが多数派っぽい?
Yash-rs では pid が使い回されたときに古いジョブを消している。その場合、(OS が使用する pid 空間が有限なので) ジョブリストが無限に膨らむことはない。
非同期リストを起動するばかりで wait しない場合、シェル内部のジョブリストにジョブがどんどん溜まってゆき、最終的にメモリを使い果たす可能性がある。ジョブが多過ぎるときに古いジョブを消すべきか。 なお POSIX では CHILD_MAX 個を超えるジョブは覚えなくてよいとしている。