以下のシェルスクリプトがインターネットに移動しています。
:(){ :|: & };:
デフォルトでは、このシェルスクリプトは自分自身を呼び出す関数を生成し、無限再帰を引き起こします。明らかに、これはリソースが枯渇してシステムがクラッシュするまで続くフォーク爆弾です。
私の質問は、このスクリプトがスタックオーバーフローを引き起こし、すべてのシステムリソースを消費する前にシェルがセグフォルトを生成しないのですか?これは正確にどのように機能しますか?
答え1
最新のLinuxバージョンでは、このコードをbashで実行してもシステムがクラッシュしません。それがすることは、「フォーク」システムコールを乱用することです。関数の「&」はバックグラウンドで実行されることを意味し、これを試みるときにfork()システムコールを使用します。フォークが多すぎると、フォークが使用できなくなり、フォークも必要になるため、新しいアプリケーションを起動できません。ただし、アプリケーションとすでに実行されているアプリケーションは問題ありません。