%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 是如何工作的? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
计算位数:这条线是如何工作的? n=n&(n-1); [复制]