質問: linuxには、フォーク爆弾から保護するための対策がありますか? #include <unistd.h> int main(int argc, char* argv[]) { while(1) { fork(); } } このプログラムをlinuxで実行しましたが、ターミナルに何も出力されません。osが停止しているようです。 linuxには、メモリ不足になる可能性のあるそのようなプログラムに対する保護手段がありますか?
回答: これは フォーク爆弾 として知られています。 linuxには、メモリ不足になる可能性のあるそのようなプログラムに対する保護手段がありますか? あんまり。各フォークは、独自の仮想アドレス空間とメモリ使用量で新しいプロセスを生成します。したがって、各コピーは比較的小さいです。最終的には、システム上のすべての物理メモリとスワップメモリを使い果たし、メモリ不足(oom)キラーが個々のプロセスの強制終了を開始します。しかし、フォーク爆弾はそれでも同じくらい速くプロセスを作成します(速くはないにしても)。そもそもこれが発生しないようにする1つの方法は、 ulimit -u (bashを使用していると仮定します。他のシェルにも同等のものがあります)。