Windows批处理文件末尾的简单插入符号(^)会占用所有内存
这个简单的批处理文件按照相对较短的顺序使用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也无效。 我不得不关机。
思考
这个原因(根据我的理解)是由于cmd解释器寻找一个字符以逃避,因为^
是批转义字符。 在这种情况下,不要正确地标识文件eof
的结尾,cmd只是在查找要转义的字符时保持循环和初始化。
在Windows 8 Pro(64)上用cc^^^
(多克拉用于加速泄漏)转载。
试验
cc^
无限循环并且泄漏非常缓慢。
cc^^
与正常的无效命令错误一起崩溃。
cc^^^
无限循环并且泄漏速度更快。
cc ^
无限循环并且泄漏非常缓慢。
cc ^^
与正常的无效命令错误一起崩溃。
cc ^^^
无限循环并且泄漏速度更快。
cc"^
崩溃,正常的无效命令错误。
cc"^^
崩溃,正常的无效命令错误。
cc"^^^
与正常的无效命令错误一起崩溃。
笔记
^
字面上使用(报价的外侧)。 当引用添加脚本崩溃时出现标准无效命令错误。 注意事项
^
(0x5E)或至少奇数个克拉结束。 上一篇: Simple caret (^) at end of Windows batch file consumes all memory