2012-11-18 6 views
61

%0|%0を含む.batまたは.cmdファイルを実行すると、コンピュータが大量のメモリを使用し始め、数分後にコンピュータが再起動されます。なぜこのコードはあなたのWindowsをブロックするのですか?そして、このコードはプログラムによって何をしていますか?それは "バグ"と見なすことができますか?%0 |%0とは何ですか?どのように動作しますか?

+1

[バッチフォークボム?]の複製がありますか?(http://stackoverflow.com/questions/8949103/batch-fork-bomb) – Cerbrus

答えて

114

これはfork bombのWindows版です。

%0は、現在実行中のバッチファイルの名前です。ちょうどこの行含むバッチファイル:

%0|%0 

はすぐに多くのプロセスを作成し、システムを遅くし、再帰的に永遠に自身を実行しようとしています。

これはウィンドウのバグではなく、バッチファイルで行うのは非常にばかげたことです。

+3

なぜ%0 |%0はウィンドウを分割しますが、%0は分割しません。 – Pavel

+8

@Pavel: '.bat'ファイルは次のようになります:ファイルの最後にあるread命令は終了します。 %0を実行した場合: プロセス1:起動し、%0を実行します(プロセス2を作成します)。その後、die プロセス2:起動し、%0を実行します(プロセス3を作成します)。 [...]あなたはいつも、作成者が死んでしまうので、実行中のプロセスは2つしかありません。 フォークボムのポイントは、2つのバージョンを作成することです。したがって、P1は2つのプロセス(1 'と1 ")を作成し、それらの2つのプロセスはそれぞれ2つ(つまり4つ)の指数関数を作成します。 – pltrdy

36

これはフォークボムとして知られています。 オプションがなくてもシステムを再起動するまで、分裂し続けます。 http://en.wikipedia.org/wiki/Fork_bomb

+0

Linuxのコマンドを取得できますか? –

+1

@RohanGala:' $ 0; $ 0' bashとzshは、Ubuntu 14でテストされています。04) – seaturtle

+0

^Cで停止することができるので、SIGINTを無視するか、またはそれを防ぐためにデタッチする必要があります。 (: – seaturtle

6

これは論理爆弾であり、自分自身を作り直し続け、すべてのCPUリソースを占有します。あまりにも多くのプロセスでコンピュータに過負荷を与え、強制的にシャットダウンします。これでバッチファイルを作成して起動すると、taskmgrを使って終了することができます。あなたはこれをかなり早くやる必要があります。そうしないと、コンピュータが遅すぎて何もできなくなります。

16

概要:

%0|%0fork bombです。同じプログラムのコピーを非同期に実行するパイプ|を使用して、別のプロセスを起動します。これはCPUとメモリを大量に消費し、システムをほぼ停止させる(またはシステムをクラッシュさせる)こともあります。この仕組み

%0は、現在のプログラムを実行するために使用されるコマンドを指します。たとえば、script.bat

パイプ|パイプ|シンボルは、最初のコマンドシーケンスの出力または結果を2番目のコマンドシーケンスの入力とします。フォークボンベの場合は出力がないので、入力せずに2番目のコマンドシーケンスを実行するだけです。

例を展開すると、%0|%0script.bat|script.batを意味する可能性があります。これは再度実行されますが、同じプログラムを(入力なしで)もう一度実行する別のプロセスを作成します。

関連する問題