Почему перенаправляющий вывод не изменяет последнее измененное поле времени для целевого файла? - PullRequest
0 голосов
/ 01 декабря 2011

В Cygwin запущен скрипт bash, вывод которого был перенаправлен в другой файл.MS-DOS демонстрирует такое же поведение, если я запускаю сценарий bash как пакетное задание.

bash.exe &> log.txt

Я знаю, что bash.exe регулярно выводит выходные данные, поэтому я хотел бы просто отслеживать время последнего изменения журнала.txt для определения зависания bash.exe.

К сожалению, добавление содержимого в файл log.txt с помощью перенаправления не меняет время последнего изменения файла log.txt.

# ls -la --full-time log.txt
-r-xr-x---+ 1 user Domain Users 66455 2011-11-30 16:16:45.246664800 -0500 log.txt

Через некоторое время ...

# ls -la --full-time log.txt
-r-xr-x---+ 1 user Domain Users 66838 2011-11-30 16:16:45.246664800 -0500 log.txt

Обратите внимание, что, хотя log.txt стал больше, время последнего изменения не изменилось.Время последнего изменения обновляется только после завершения bash.exe.

Ubuntu 11.04 правильно обрабатывает этот сценарий, IMO.

Cygwin: CYGWIN_NT-6.1
MS-DOS: Microsoft Windows [Версия 6.1.7601]

1 Ответ

0 голосов
/ 02 декабря 2011

У меня проблемы с воспроизведением, используя только Cygwin, поэтому я не представляю проблему точно.Мой процесс заключается в вызове Runtime.getRuntime.exec() внутри процесса Java, который открывает cygwin / bin / bash.exe и затем запускает команду перенаправления изнутри bash.В том же Java-процессе, который называется exec(), я пытаюсь отслеживать время последнего изменения, основываясь на том, что происходит в ранее названном bash.exe.

Я переключился на проверку длины файла вместоопределить, завис ли процесс, который работает.Я думаю, это какая-то проблема с областью видимости.

...