批量炸弹?

mow*_*ker 10 fork pipeline batch-file

我正在维基百科上查看叉炸弹,批量示例如下:

%0|%0
Run Code Online (Sandbox Code Playgroud)

要么

:here
start ''your fork bomb name''.bat
goto here
Run Code Online (Sandbox Code Playgroud)

要么

:here
start %0
goto here
Run Code Online (Sandbox Code Playgroud)

我理解了第二个,他们开始了另一个自己的实例,然后重复,但我不明白第一个.我读到管道执行右边的文件,文件的输出在左边.叉炸弹为什么不能成为:

%0
Run Code Online (Sandbox Code Playgroud)

我会假设这会调用自己,但然后立即终止,但为什么不会%0|%0终止?即使新实例将继续创建新实例,但是在开始第二次实例后不是第一次完成吗?是什么让第一个继续?

编辑:是否循环,因为在返回递归调用之前,所有实例都无法终止?这是否意味着它只会调用第一个%0

dbe*_*ham 8

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

但是除了父进程之外,Windows管道还为管道的每一侧创建一个新进程.在管道的每一侧终止之前,父进程无法完成.所以带有简单管道的主程序将有3个进程.如果管道的每一侧递归地调用父批,你可以看到炸弹如何快速失控!

  • 双方是异步运行的 (3认同)
  • 这里有关于Windows管道的异步性质的很好的信息:http://stackoverflow.com/a/8194279/1012053 (3认同)
  • 有人告诉我,管道在上半年返回时调用下半部分:http://www.csie.ntu.edu.tw/~r92092/ref/win32/win32scripting.html#Win32Scripting-Command-Redirection-And -Pipelines (2认同)