我正在维基百科上查看叉炸弹,批量示例如下:
%0|%0
OR
:here
start ''your fork bomb name''.bat
goto here
OR
:here
start %0
goto here
我理解第二个,他们开始自己的另一个实例,然后重复,但我不明白第一个。我读到管道执行右边的文件,文件的输出在左边。为什么叉炸弹不能成为:
%0
我会假设这会自行调用,但会立即终止,但为什么%0|%0
也不会终止?即使新实例将继续创建新实例,但是在开始第二次实例后不是第一次完成吗?是什么让第一个继续?
编辑:是否循环,因为在返回递归调用之前,所有实例都无法终止?这是否意味着它只调用第一个%0
?
答案 0 :(得分:8)
%0将永远不会结束,但它永远不会创建多个进程,因为它会立即将控制转移到第二个批处理脚本(恰好就是它自己)。
但是除了父进程之外,Windows管道还为管道的每一侧创建了一个新进程。在管道的每一侧终止之前,父进程无法完成。所以带有简单管道的主程序将有3个进程。如果管道的每一侧递归地调用父批,你可以看到炸弹如何快速失控!