簡體   English   中英

Shell腳本循環在CygWin下耗盡內存

[英]Shell script loop runs out of memory under 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可用內存的解決方案,那似乎是不合邏輯的,因為腳本會隨着時間的推移逐漸增加自己的內存使用量。因此,這樣的解決方案只會延遲不可避免的,我認為。)

這是男孩住宅區發現的信息摘要。 作為記錄 :)

描述此問題的cygwin郵件列表的郵件/主題位於http://thread.gmane.org/gmane.os.cygwin/134041

http://cygwin.com/faq/faq.using.html#faq.using.bloda是應用程序的鏈接,可能會導致cygwin出現這種“bloda”問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM