loops - %0|%0 是如何工作的?
问题描述
我看过一篇关于如何的帖子%0|%0
,但我仍然不太确定,是循环自己循环还是打开另一个文件再次运行并自行删除?
它可以在批处理文件中循环吗?我现在无法使用我的电脑进行实验。
解决方案
你说:“我现在不能用我的电脑做实验”。
您确定不是:“我对此进行了实验,所以我现在无法使用我的电脑”。:)
除了笑话,%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
启动进程的速度。
参见叉形炸弹。
推荐阅读
- html - 错误 TS2307:找不到模块“fs”或其相应的类型声明
- python - Python中带有浮点值的索引列表的TypeError
- javascript - grunt-contrib-uglify@0.2.7 需要 grunt@~0.4.0 的对等点,但没有安装。您必须自己安装对等依赖项
- javascript - 将 JS 对象与 div 的中间对齐
- python - 向消息添加 django 格式
- java - 为什么我不能在我的“公共类适配器扩展 PagerAdapter”到 MainActivity2s
- javascript - 在浏览器 Javascript 中显示二进制 PDF
- javascript - 警告:文本内容不匹配。React 中的警告
- ajax - extjs 中的 Ajax 请求触发成功,尽管响应为假
- python - 如何使用数据框中 2 列的值使用字典分配新列