%0|%0 是如何工作的? [复制]

Posted

技术标签:

【中文标题】%0|%0 是如何工作的? [复制]【英文标题】:How %0|%0 works? [duplicate] 【发布时间】:2021-07-12 00:54:31 【问题描述】:

看过%0|%0怎么写的帖子,但我还是不太确定,是循环自己循环还是打开另一个文件再次运行然后自己删除?

它可以在批处理文件中循环吗?我现在不能用我的电脑做实验。

【问题讨论】:

是脚本路径和名称。 @Squashman %0 是的,但是%0|%0 会导致分叉炸弹。 【参考方案1】:

你说:“我现在不能用我的电脑做实验”

你确定不是:“我正在试验这个,所以我现在不能使用我的电脑”:)

除了笑话,%0|%0 几乎是一种叉子炸弹。

| 管道获取第一个命令的输出并将其发送到管道之后的下一个命令。

在这种%0|%0 的情况下,您将批处理文件通过管道传输到自身,从而创建一个永久递归循环,该循环将快速消耗资源并最终使您的系统崩溃。

尝试说明这里发生了什么。

假设批处理文件为dummy.cmd%0|%0 将如下所示:

D:\dummy.cmd | d:\dummy.cmd

启动它会启动一个循环,它会重复启动自身,类似于:

                                         dummy.cmd ..etc..             
                          dummy.cmd ->   dummy.cmd ..etc..       
             dummy.cmd ->
                                         dummy.cmd ..etc..
                          dummy.cmd ->   dummy.cmd ..etc..
dummy.cmd -> 
                          dummy.cmd ->   dummy.cmd ..etc..
             dummy.cmd ->                dummy.cmd ..etc..
          
                          dummy.cmd ->   dummy.cmd ..etc..
                                         dummy.cmd ..etc..

但是您需要了解的是,它不仅是一个进程在循环中生成另一个进程,每个生成的进程都会再次重复自己。 所以第一个过程再创造两个,这两个每个创造两个,这四个创造两个,等等。

每个管道操作都派生到初始进程窗口内部的 cmd 进程。

因此,如果您有幸在运行时运行tasklist,您将看到在后台创建的混乱与启动cmd 进程的速度一样。

也请参阅fork bomb。

【讨论】:

以上是关于%0|%0 是如何工作的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

printf 函数是如何工作的? [复制]

c++ 的 substr() 是如何工作的? [复制]

计算位数:这条线是如何工作的? n=n&(n-1); [复制]

返回语句在 JavaScript 中是如何工作的? [复制]

bat脚本照片复制重命名?

背景百分比的 CSS 计算如何工作? [复制]