フォークボム – ウィキペディア

before-content-x4

再帰プロセス生成

フォークボム (英語 フォーク爆弾 )、 また うさぎ 呼び出されたのは、自社の再帰的なコピーを開始し、利用可能なすべてのシステムリソースを消費し、システムをブロックする唯一の目的をその唯一の目的とするコンピュータープログラムです。最も単純な場合、これはUnixの下で、エンドレスループでフォークシステムの呼び出しを呼び出して発生します。

after-content-x4

Pseudocodeでは、フォークボムは次のように見えます。

programx {
  プログラムを呼び出します。
  プログラムを呼び出します。
  プログラムを待つことが終了しました。
} 

プログラムは、自分自身の2つのコピーを呼び出し、それらが終了するのを待ちます。ただし、コピーも処理されるため、この状態は決して達成されません。最初の2、次に4、その後8、そしてそのようなサイクルのみがすでに開始され、1,000部以上のアクティブなプログラムが呼び出されました。一般に、それはその後に述べることができます n サイクル 2 n プロセスが作成されているため、数が指数関数的に増加します。複雑なコードが含まれていなくても、オペレーティングシステムによる管理のためのCPU時間と保管を消費します。フォークボムを求めてから数秒後には、通常の操作または通常の作業は不可能です。

フォークボムの具体的な効果は、主にオペレーティングシステムの構成に依存します。たとえば、PAMを使用すると、ユーザーごとのプロセス数と最大メモリをUNIXおよびUNIXのようなオペレーティングシステムで消費できます。これらのオプションを制限のために使用するシステムでフォークボムを「爆発」します。ある時点で、フォークボムと成長の新しいコピーを開始しようとする試みが含まれます。

システムの安定性を危険にさらすためには、以下の例を推奨することをお勧めします いいえ 実行する。

Microsoft Windowsバッチファイル [ 編集 | ソーステキストを編集します ]

短い形式のMicrosoft Windowsバッチファイルの例:

after-content-x4

また

 @ エコー オフ 始める  始める  「フォークボム」 /高い %0  goto  始める  

プログラミング言語c [ 編集 | ソーステキストを編集します ]

UNIXの下のCの例:

#含む   int  主要 空所 ){   ために (;;)   フォーク ();   戻る  0 ;  }  

Windowsの下のCの例

#含む   int  主要 int  argc  char  ** argv ))  {   startupinfo  ;   プロセス情報  pi ;   ゼロメモリー  のサイズ ));   CB  =  のサイズ );    while (1) {
	  SetConsoleCtrlHandler(0, 1);
	  CreateProcess(*argv, 0, 0, 0, 0, CREATE_NEW_CONSOLE, 0, 0, &si, &pi);
  }
  return 0;
}

Java [ 編集 | ソーステキストを編集します ]

Javaの例:

公共  クラス  フォークボム  実装  実行可能  {  公共  静的  空所  主要 []  args ))  {  新しい  フォークボム ()。 走る ();  }  公共  空所  走る ()  {  新しい  これ )。 始める ();  これ 走る ();  }  }  

Perl [ 編集 | ソーステキストを編集します ]

コマンドラインコールとしてのPerlの例:

Perl   -  そうです  「フォーク中のフォーク」  

Php [ 編集 | ソーステキストを編集します ]

PHPの例:

<?php  その間 真実 ))  pcntl_fork ();  ?>  

ルビー [ 編集 | ソーステキストを編集します ]

ルビーの例:

Python [ 編集 | ソーステキストを編集します ]

プログラムとしてのPythonの例:

輸入  あなた  その間  真実  あなた フォーク ()  

またはコマンドラインの呼び出しとして:

Python -C 'while 1:__import __( "os")。fork()'  

バッシュ [ 編集 | ソーステキストを編集します ]

通常の形のバッシュの例:

関数 f ()  { f | f  } f 

プロパティをフォークボムとして偽装するために、上記のコードはしばしば次の短い形式で示されています。

説明:

()  #関数の定義 ":"  - 常に「呼び出された」場合、次のことを行います。  {  # ":" loadの新しいコピー  |  #…そして、その標準版を... #… ":"の別のコピー(メモリにもロードする必要があります)  #( ":|:" ":"の2つのコピーを作成するだけで、呼び出されるたびに)   #呼び出しプロセスに関係なく、コマンドラインを作成します(バックグラウンドで実行)  }   ;  # 終えた ";" 「:」の定義は終了します #...そして "を呼び出すことによって:"連鎖反応が始まりました。  

after-content-x4