3

我编写了一个在 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 可用内存的解决方案,这似乎不合逻辑,因为脚本会随着时间的推移逐渐增加其自身的内存使用量。因此,我认为这样的解决方案只会延迟不可避免的事情。)

4

1 回答 1

1

这是男孩住宅区找到的信息的摘要。作为记录 :)

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

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

于 2012-06-01T20:25:59.413 回答