
機能に関する他の質問を読んだ。フォーク爆弾これは、フォークプロセス中にCPU時間を消費し、オペレーティングシステムのプロセステーブルを飽和させるように機能します。
フォークバームの基本的な実装は、同じプロセスを繰り返し開始する無限ループです。
しかし、私は本当に知りたいです。このコマンドの由来は何ですか?なぜこれ:(){ :|:& };:
であり、他ではないか。
答え1
これは新しいものではありません。その歴史は1970年代の発売にさかのぼる。
から引用ここ、
フォーク爆弾の最初の説明の1つは、1969年にワシントン大学のBourroughs 5500でした。これは、実行時に独自のコピーを2つ作成し、再び2つのコピーを作成するRABBITSという「ハッキング」として説明されます。各コピーはより多くのコピーを作成し、レプリカはメモリがいっぱいになるまでより多くのコピーを作成し、システムの競合を引き起こします。 Q: Misanthropeは7年生だった1972年にBASICでRabbitのようなプログラムを作成しました。エール大学のJerry Leichterは、彼の母校のプリンストンでウサギ爆弾やフォーク爆弾に似た聴覚プログラムを説明し、卒業日を考慮すると、1973年以前に実施されたプログラムであるにちがいないと述べました。 1974年の報告書には、実際に「Rabbit」というプログラムが大企業のIBM 360システムで実行されており、若い従業員がこのプログラムを実行したという理由で解雇されたと説明されています。
したがって、これは:(){ :|:& };:
シェルでフォーク爆弾を実装する唯一の方法です。他のプログラミング言語を採用する場合は、その言語を使用して実装することもできます。たとえば、Pythonでは、次のようにフォーク爆弾を実装できます。
import os
while True:
os.fork()
さまざまな言語でフォーク爆弾を実装するためのより多くの方法は、以下にあります。ウィキペディア協会。
構文を知りたい場合はとても簡単です。シェルの一般的な関数は次のとおりです。
foo(){
# function code goes here
}
爆弾の定義fork()
は次のとおりです。
:(){
:|:&
};:
:|:
- 次に、再帰というプログラミング技術を使用して自分自身を呼び出し、出力を関数の他の呼び出しにリンクします:
。最悪の部分は、関数が2回呼び出され、システムに衝撃を与えることです。
&
- サブプロセスが終了せず、システムリソースの消費を開始しないように、関数呼び出しをバックグラウンドに配置します。
;
- 終了機能の定義
:
- フォーク()爆弾設定とも呼ばれる関数を呼び出し(実行)します。
人が読みやすいコードは次のとおりです。
bomb() {
bomb | bomb &
}; bomb
引用する
答え2
イタリアのハッカーアーティストは、これを一連の笑顔のようなキャラクターに定式化して人気を得ました。https://jaromil.dyne.org/journal/forkbomb.html
結局、同じフォーク爆弾をより理解しやすい方法で書くことができます。
bomb() {
bomb | bomb &
}
bomb
しかし、Jaromilはウイルスを詩的な方法で暗号化したいと思い、次のように言いました。
ソースコードを文学的に考えて、私はウイルスをVerlaine、Rimbaudなどがインターネットを異性愛規範社会の安全ゾーンに販売する人々について書いた一種の詩であると説明します。 [...]ウイルスは依然として非常に大きな社会の政治的症状であり、ウイルスを禁止しても発生する問題は解決されません。匿名性とハッキングも同じだ。
Jaromilは、爆弾を発明したのではなく、匿名の芸術作品として提示したことに注意してください。