Как устранить неполадки зависания Cygwin CP в качестве службы - PullRequest
1 голос
/ 03 февраля 2012

У меня машина с Windows 7 со старым Хадсоном, работающая в контейнере Glassfish.Это запускает сборку, управляемую длинным скриптом cygwin bash.Одна часть сценария содержит цикл:

if [ -d "$STASH_DIR" ]; then
    svn status -v images | \
            iconv -f cp1250 -t utf-8 | \
            sed 's+\\+/+g' | \
            grep '^        .*\.\(gif\|png\)$' | \
            while read dummy rev author file; do
        dat=${file%.???}.dat
        if [ -f "$STASH_DIR/$dat.$rev" ]; then
            cp -v "$STASH_DIR/$dat.$rev" "$dat"
        fi
    done || true # Not critical; ignore failures
fi

(Существует множество изображений и процесс, который работает с ними, и это очень медленно, поэтому я кеширую его результаты в отдельном каталоге. Процессвозможно, это можно сделать намного быстрее, но это уже другая проблема.)

Теперь время от времени зависает cp, который где-то посередине списка файлов.Это идет в бесконечный цикл поедания процессора, и я должен убить его.Когда я это делаю, цикл продолжается, и сборка завершается нормально.Но так как это всего лишь кеш, если файл не скопирован, сборка все равно будет успешной.

Так что мой вопрос , какие варианты у меня есть для устранения неполадок ?Он работает как сервис под учетной записью SYSTEM, но у меня есть права администратора, поэтому я мог бы прикрепить что-то к нему.Я просто не знаю, что поможет.У меня есть Visual Studio там, и я могу установить там любые инструменты cygwin, но бинарный файл явно не собран с отладочной информацией.

Редактировать: Я пробовал:

  • resmon не показывает ничего интересного, кроме того, что процесс работает на полной скорости.
  • Может быть интересно, что процессы сообщаются как bash.exe инструментами Windows, в то время как они /usr/bin/cp согласноPS. Cygwin
  • Согласно отладчику (Visual Studio) процессы не имеют отладочной информации (ожидается) и выполняют код только из cygwin1.dll (только корневой фрейм), kernel32.dll и ntdll.dll;никакие фреймы не указывают на сам исполняемый файл.
  • Согласно handle.exe имеет только открытый файл журнала Glassfish (C:\glassfishv3\glassfish\domains\domain1\logs\jvm.log), это рабочий каталог и C:\Windows, и, кроме того, толькокуча объектов, называемых \BaseNamedObjects\ что-то .

Возможно, это не удается при попытке выполнить cp.exe или когда он заканчивается, но я все еще не знаю, какпроверить / отладить.

...