内部で.batまたは.cmdファイルを実行すると%0|%0
、コンピュータは大量のメモリを使用し始め、数分後に再起動します。このコードがWindowsをブロックするのはなぜですか?そして、このコードはプログラムで何をしますか?それは「バグ」と見なすことができますか?
5 に答える
これは、Windows版のフォーク爆弾です。
%0
現在実行中のバッチファイルの名前です。この行だけを含むバッチファイル:
%0|%0
自分自身を永久に再帰的に実行し、多くのプロセスをすばやく作成し、システムの速度を低下させます。
これはWindowsのバグではなく、バッチファイルで行うのは非常に愚かなことです。
これはフォーク爆弾として知られています。システムを再起動する以外に選択肢がなくなるまで、それ自体が分割され続けます。 http://en.wikipedia.org/wiki/Fork_bomb
それは何ですか:
%0|%0
フォーク爆弾です。|
同じプログラムのコピーを非同期で実行するパイプを使用して、別のプロセスを生成します。これにより、CPUとメモリが占有され、システムの速度がほぼ停止します(またはシステムがクラッシュすることさえあります)。
これがどのように機能するか:
%0
現在のプログラムを実行するために使用されるコマンドを指します。例えば、script.bat
パイプ|
シンボルは、最初のコマンドシーケンスの出力または結果を2番目のコマンドシーケンスの入力として作成します。フォーク爆弾の場合、出力がないため、入力なしで2番目のコマンドシーケンスを実行するだけです。
例を拡張すると、%0|%0
を意味する可能性がありますscript.bat|script.bat
。これはそれ自体を再度実行しますが、同じプログラムを(入力なしで)再度実行するための別のプロセスも作成します。
%0は決して終了しませんが、制御を2番目のバッチスクリプト(たまたまそれ自体)に即座に転送するため、複数のプロセスを作成することはありません。
ただし、Windowsパイプは、親プロセスに加えて、パイプの両側に新しいプロセスを作成します。親プロセスは、パイプの両側が終了するまで終了できません。したがって、単純なパイプを使用するメインプログラムには3つのプロセスがあります。パイプの両側が親バッチを再帰的に呼び出すと、爆弾がすぐに制御不能になることがわかります。
これは論理爆弾であり、それ自体を再作成し続け、すべてのCPUリソースを消費します。それはあまりにも多くのプロセスであなたのコンピュータを過負荷にし、それはそれをシャットダウンすることを強制します。これを含むバッチファイルを作成して開始すると、taskmgrを使用して終了できます。あなたはこれをかなり速くしなければなりません、さもなければあなたのコンピュータは何もするのに遅すぎるでしょう。