84

如果您在其中运行 .bat 或 .cmd 文件%0|%0,您的计算机开始使用大量内存,几分钟后重新启动。为什么此代码会阻止您的 Windows?这段代码以编程方式做了什么?它可以被认为是一个“错误”吗?

4

5 回答 5

153

这是一个fork 炸弹的 Windows 版本。

%0是当前正在执行的批处理文件的名称。只包含这一行的批处理文件:

%0|%0

将永远递归地执行自身,快速创建许多进程并减慢系统速度。

这不是 Windows 中的错误,它只是在批处理文件中做的一件非常愚蠢的事情。

于 2012-11-18T00:52:46.533 回答
39

这被称为叉形炸弹。它不断分裂,直到别无选择,只能重新启动系统。 http://en.wikipedia.org/wiki/Fork_bomb

于 2013-03-28T21:54:19.813 回答
29

这是什么:

%0|%0叉子炸弹。它将使用管道生成另一个进程,该管道|异步运行同一程序的副本。这会占用 CPU 和内存,使系统减速到几乎停止(甚至使系统崩溃)。

这是如何工作的:

%0指用来运行当前程序的命令。例如,script.bat

管道|符号将使第一个命令序列的输出或结果作为第二个命令序列的输入。在 fork 炸弹的情况下,没有输出,因此它只会运行第二个命令序列而无需任何输入。

扩展示例,%0|%0可能意味着script.bat|script.bat. 这会再次运行自己,但也会创建另一个进程来再次运行相同的程序(没有输入)。

于 2016-12-14T00:02:47.433 回答
8

%0 永远不会结束,但它永远不会创建多个进程,因为它会立即将控制权转移到第二个批处理脚本(恰好是它自己)。

但是,除了父进程之外,Windows 管道还会为管道的每一侧创建一个新进程。直到管道的每一侧终止,父进程才能完成。所以带有简单管道的主程序将有 3 个进程。如果管道的每一侧递归地调用父批处理,您可以看到炸弹是如何迅速失控的!

于 2012-01-21T01:01:47.747 回答
6

这是一个逻辑炸弹,它不断地重新创建自己并占用你所有的 CPU 资源。它使您的计算机因过多的进程而过载,并迫使它关闭。如果您在其中创建一个批处理文件并启动它,您可以使用 taskmgr 结束它。您必须非常快地完成此操作,否则您的计算机将太慢而无法执行任何操作。

于 2014-11-28T17:26:11.207 回答