2009-06-13 29 views
113

ウィキペディアによると、次は非常にエレガントなbashのフォーク爆弾です:このbashフォークボムはどのように機能しますか?

:(){ :|:& };: 

それが動作しない方法は?

+50

:(){:|:& };:UNIXがあいまいであるとは限りません。あなたが曖昧なものを書くことが許されているからといって、それが適切に使用されていることはあいまいではありません。私はかなり英語の文章を書くことができましたが、分かりやすいものを書くこともできます。 – c4757p

+9

@ c4757pケース・イン・ポイント:「Buffalo buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo Buffalo」は、アメリカ英語の文法上の正しい文です(http://en.wikipedia.org/wiki/Buffalo_buffalo_Buffalo_buffalo_buffalo_buffalo_Buffalo_buffalo) – tomfumb

+0

フォーク爆弾の作品:[http://www.cyberciti.biz/faq/understanding-bash-fork-bomb/](http://www.cyberciti.biz/faq/understanding-bash-fork-bomb/)残念ながら、それは私はスマイルで盛りつけられています。私はここでもプレーンテキストでアップロードしています:[http://pbin.oogly.co.uk/listings/viewlistingdetail/7e9399079ac13111492326d01ed16d](http://pbin.oogly.co.uk/listings/ viewlistingdetail/7e9399079ac13111492326d01ed16d)お楽しみください、それは良い読書です。 – Jon

答えて

157

それを破壊、三の大部分があります。ボディ内部

:()  # Defines a function, ":". It takes no arguments. 
{ ... }; # The body of the function. 
:  # Invoke the function ":" that was just defined. 

は、関数が二回呼び出され、パイプラインがバックグラウンドにされます。プロセス上で連続して呼び出されるたびに、「:」への呼び出しがさらに発生します。これは、システム資源の爆発的な消費に急速につながり、事態を止める。

これを一度呼び出すと無限に再帰しても元のプロセスのスタックオーバーフローにつながりますが、それは扱いにくいので注意してください。

kablammo() {    # Declaration 
    kablammo | kablammo& # The problematic body. 
}; kablammo    # End function definition; invoke function. 

編集:以下ウィリアムさんのコメントは、私は上記の言ったことのより良い文言だったので、私はその提案を組み込むために編集した

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

+9

...そして、kablammo! –

+2

あなたのシステムが煙の中に浮かんできたら、爆発を避けてください! –

+8

ニアニティ:「関数が2度呼び出され、インスタンスがバックグラウンド化されています。この関数はパイプラインで2回呼び出され、パイプはバックグラウンドになっているため、両方のインスタンスがバックグラウンドで実行されています。それは実際には意味的な詳細ですが、1つしか試みられない可能性があり、その再帰は他のシステムが起動する前にシステムを停止します。 –

9

短い答え:

コロン(「:」)関数となるので、あなたは、関数を実行している関数にパイプや機能の呼び出しごとの2つのコピーを意味backgrounに入れます関数が呼び出されます。再帰が必要です。

関連する問題