114


51

ウィキペディアによると、以下はとてもエレガントなbash fork bombです。

:(){ :|:& };:

それはどのように機能しますか?

2 Answer


158


分解すると、3つの大きな部分があります。

:()      # Defines a function, ":". It takes no arguments.
{... ; #関数の本体
:        # Invoke the function ":" that was just defined.

本体の内部では、関数は2回呼び出され、パイプラインはバックグラウンドになります。プロセスに対する連続した呼び出しごとに、さらに ":"が呼び出されます。 これは急速にシステムリソースの爆発的な消費につながり、物事を停止させます。

これを1回呼び出すと、無限に再帰するだけでは十分ではないことに注意してください。これは、元のプロセスでスタックオーバーフローを引き起こすだけなので、面倒ですが対処することができます。

より人間に優しいバージョンはこのようになります。

kablammo(){#宣言宣言カブラモ ; kablammo#機能定義の終了。関数を呼び出します。

*編集:*下記のウィリアムのコメントは私が上で言ったことのより良い言い回しだったので、私はその提案を取り入れるように編集しました。


9


短い答え:

コロン( ":")は関数になるので、あなたはその関数にパイプで接続された関数を実行してそれをバックグラウンドに置く。 再帰が成立します。