4

Как перенаправить стандартный вывод программы в файл, когда он запускается в фоновом режиме?

У меня есть программа, которая генерирует вывод каждую секунду. Когда я запускаю его как обычно и перенаправляю в файл, вывод в этом файле, как и ожидалось:

#./program > file.txt
#cat file.txt
 output
 output
 output
#

Когда я пытаюсь сделать то же самое в фоновом режиме, файл останется пустым:

#./program > file.txt &
#cat file.txt
#

2 ответа2

4

Как насчет sh -c './program > file.txt; cat file.txt' & ?

2

При перенаправлении stdout в текстовый файл вы меняете тип потока с консоли на файл. Вывод на консоль небуферизован, а вывод файла - буферизован. Пока программа не сбросит стандартное устройство (файл), текст будет продолжать буферизоваться, пока не будет достигнут порог буферизации. Если текст «output \n» печатается каждые 2 секунды, а пороговое значение составляет 4096 байт, потребуется около 20 минут, чтобы увидеть любые выходные данные программы в файле.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .