このフォーク爆弾スクリプトについて混乱している

このフォーク爆弾スクリプトについて混乱している

以下のシェルスクリプトがインターネットに移動しています。

:(){ :|: & };:

デフォルトでは、このシェルスクリプトは自分自身を呼び出す関数を生成し、無限再帰を引き起こします。明らかに、これはリソースが枯渇してシステムがクラッシュするまで続くフォーク爆弾です。

私の質問は、このスクリプトがスタックオーバーフローを引き起こし、すべてのシステムリソースを消費する前にシェルがセグフォルトを生成しないのですか?これは正確にどのように機能しますか?

答え1

最新のLinuxバージョンでは、このコードをbashで実行してもシステムがクラッシュしません。それがすることは、「フォーク」システムコールを乱用することです。関数の「&」はバックグラウンドで実行されることを意味し、これを試みるときにfork()システムコールを使用します。フォークが多すぎると、フォークが使用できなくなり、フォークも必要になるため、新しいアプリケーションを起動できません。ただし、アプリケーションとすでに実行されているアプリケーションは問題ありません。

関連情報