Shell脚本循环在CygWin下耗尽内存

时间:2012-05-31 16:08:29

标签: linux bash shell memory cygwin

我编写了一个在CygWin下运行的shell脚本,其目的是监视文件的变化。如果MD5哈希与前一个哈希不匹配,它将执行一个命令来处理该文件。我在哈希检查之间使用了1秒的延迟。这可以在几个小时内工作,但随后会出现“内存不足”错误,实际上会让Windows 7瘫痪。

脚本在循环中使用循环;外部循环是无限的设计,内部循环在找到不匹配的散列并处理文件时结束。它在运行内部循环时断开,没有在该时间点修改文件。该文件之前已多次修改,触发内循环下方的代码,但不是发生内存错误的时间。

我只是想知道为什么这里的循环会随着时间的推移消耗越来越多的内存。我一遍又一遍地将新的MD5值分配给现有变量,而不是为每个MD5分配分配新的变量。 (右??)1秒可能太短暂延迟......系统是否需要时间在内循环的每次迭代之间解除分配?

#!/bin/sh

FILE_TO_CHECK=/mypath/style.less

echo "Reading hash for $FILE_TO_CHECK with md5sum"
MD5PRINT=`md5sum $FILE_TO_CHECK | cut -d " " -f1`

MD5PRINTNEW=$MD5PRINT

while [[ 1 = 1 ]]
do
        echo "Waiting for file to change..."

        while [[ "$MD5PRINT" = "$MD5PRINTNEW" ]]
        do
                sleep 1

                MD5PRINTNEW=`md5sum $FILE_TO_CHECK | cut -d " " -f1`
        done

        echo "File was modified ... Running compiler..."

        /mypath/lessc $FILE_TO_CHECK /mypath/style.css -x

        echo "Reading hash for $FILE_TO_CHECK with md5sum"
        MD5PRINT=`md5sum $FILE_TO_CHECK | cut -d " " -f1`

        MD5PRINTNEW=$MD5PRINT
done

任何帮助将不胜感激。如果需要,我可以提供准确的内存错误,但我需要一些帮助来了解CygWin中的哪些日志(如果有的话),以及挖掘并查找错误文本。 (我宁愿不要整天运行它来重现错误。错误肯定与我的CygWin shell内存耗尽有关。)谢谢!

(如果你提出一个增加CygWin可用内存的解决方案,那似乎是不合逻辑的,因为脚本会随着时间的推移逐渐增加自己的内存使用量。因此,这样的解决方案只会延迟不可避免的,我认为。)

1 个答案:

答案 0 :(得分:1)

这是boy uptown发现的信息摘要。记录:)

描述此问题的cygwin邮件列表的邮件/主题位于http://thread.gmane.org/gmane.os.cygwin/134041

http://cygwin.com/faq/faq.using.html#faq.using.bloda是应用程序的链接,可能会导致cygwin出现这种“bloda”问题。