这个简单的批处理文件以相对较短的顺序消耗Windows 7(x64)上的所有可用内存。这是怎么回事?并采取什么预防措施来抵御它?
any-invalid-command-you-like-here ^
显示效果的显然必要的先决条件:
^
是文件中最后一个,并且脚本不以换行符终止.^
,而此内容将..^
(只是缓慢地)在这个 Process Explorer 屏幕截图中,脚本运行了大约30秒,消耗了2.9GB,并且仍然以稳定的速度攀升:
如果您要对此进行实验,请确保您可以进入关闭窗口[X]控件或启动任务管理器或进程资源管理器并准备为 Ctrl-C , Ctrl-Break , Alt-F4 无效。
看起来多个插入符将导致内存使用量增加得更快。我第一次遇到这个时,在1或2分钟内没有足够的内存来做简单的事情,比如 Alt-Tab 甚至3手指致敬 Ctrl-Alt-Del 无效。我不得不把电脑硬起来。
答案 0 :(得分:30)
原因(根据我的理解)是由于cmd解释器正在寻找要逃脱的角色,因为^
是批量转义字符。在这种情况下,cmd只是在寻找要逃脱的角色时保持循环和初始化,而不是正确识别文件的末尾eof
。
在带有cc^^^
的Windows 8 Pro(64)上重现(多个克拉用于加速泄漏)。
cc^
无限循环并且泄漏非常缓慢。
cc^^
因正常的无效命令错误而崩溃。
cc^^^
无限循环并且泄漏速度更快。
cc ^
无限循环并且泄漏非常缓慢。
cc ^^
因正常的无效命令错误而崩溃。
cc ^^^
无限循环并且泄漏速度更快。
cc"^
因正常的无效命令错误而崩溃。
cc"^^
因正常的无效命令错误而崩溃。
cc"^^^
因正常的无效命令错误而崩溃。
^
时,只有无限循环和泄漏。添加引号时,脚本会因标准无效命令错误而崩溃。^
(0x5E)或至少奇数克拉结束。