This question already has answers here:
What is %0|%0 and how does it work?

(4个答案)


4年前关闭。




我在Wikipedia上查看了 fork 炸弹,其批次示例为:
%0|%0

或者
:here
start ''your fork bomb name''.bat
goto here

或者
:here
start %0
goto here

我理解后两个,它们启动自己的另一个实例,然后重复,但是我不明白第一个。我读到管道会在右边执行文件,而文件的输出在左边。为什么 fork 炸弹不能是:
%0

我以为这会自己调用,但随后立即终止,但是%0|%0为什么也不会终止?即使新实例将继续创建新实例,但在启动第二个实例之后难道不是第一个完成的吗?是什么使第一个继续?

编辑:是否循环,因为没有实例可以终止直到返回它们的递归调用?这是否意味着它只会调用第一个%0

最佳答案

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

但是Windows管道除了父进程外,还在管道的每一侧创建一个新进程。直到管道的每一端都终止,父进程才能完成。因此,具有简单管道的主程序将具有3个进程。您可以看到,如果管道的每一端递归调用父批处理,炸弹将很快失控。

关于batch-file - 批叉炸弹?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8949103/

10-12 21:06