wait
何らかの理由で、私が書いたプログラムでシステムコールを使用しないことにしたとしましょう。
これは私の記憶が彼らの父が待たなかったすべての完了したプロセスでいっぱいになることを意味しますか?
これは学問的課題の一部であり、両方の回答が私が受け入れることができるので、この質問は少し混乱していると思います。
これが私が質問に答える方法です。これが実際に真であれば、フィードバックを望んでいます。
親プロセスが終了する前に子プロセスを待たない場合、これらの子プロセスはinit
親プロセスから(関数内で)呼び出されるプロセスにリンクされます。ある時点で、initプロセスはメモリ制限に関して保持できるよりも多くのプロセスを受け入れます。だから電話しないと記憶がめちゃくちゃになります。exit
forget_original_parent()
wait
また、この場合どうなるかを明確にしたいと思います。マシンが終了し、initプロセスが終了しましたか?この場合、initのすべてのサブプロセスはどうなりますか?
答え1
ある時点で、initプロセスはメモリ制限に関して保持できるよりも多くのプロセスを受け入れます。
正確ではありません。ゾンビプロセス(終了しているがまだリサイクルされていないプロセス)は、親プロセスのメモリを占有せず、カーネルのプロセステーブルからメモリを占有します。
init
「標準」なら、init
とにかくゾンビプロセスを収穫するので、何の問題もありません。
子プロセスも無視しても、init
そのプロセスが終了する可能性がある制限には達しません。主な制限は最大プロセス数です。これに達すると、新しいプロセスは作成されず、すぐに問題が発生します(プロセスは引き続き生成されます)。システムは引き続き実行されますが、ログインできず、既存のシェルなどを使用できます。