2010-10-01 3 views
1

Я запускаю фоновый процесс на Mac и имею проблему с обновлением журнала. Если я бегуКак записывать STDOUT фонового процесса без буферизации на Mac?

someprog > mylog & 

затем mylog обновляется не сразу, но с некоторыми интервалами - я предполагаю, что это из-за буферизации. То же самое с at now. Если я убью программу до того, как вывод будет записан в mylog, я потеряю данные. Не было такой проблемы с одной и той же программой на машинах Linux, поэтому я надеюсь, что смогу сделать ее также обновленной на Mac. Любая идея как?

someprog - программа F77, которая не была написана мной.

I tried to ask этот вопрос в SuperUser, но никто не может мне помочь.

EDIT1: Мне не хочется менять источник, но помните об этом. Logging отлично работает на машинах Linux, поэтому он должен работать и на Mac. Это должна быть системная настройка, например. размер буфера? Было бы здорово ограничить размер буфера меньшим значением - теперь мне приходится ждать часов, чтобы увидеть что-то в журнале.

ответ

2

Если у вас есть доступ к исходному коду, вы можете просто добавить вызовы fflush (stdout) после каждого printf. Если вы этого не сделаете, вы можете попробовать что-то сложное с LD_PRELOAD ... В принципе, создайте собственную версию printf(), которая вызывает printf libc ... И делает флеш ... Затем LD_PRELOAD, что библиотека при запуске ... Приложение будет использовать ваши вместо этого ... Kinda risky tho ...

1

Это обычное поведение программ POSIX C, которые записываются в поток не-tty - я думаю, что F77 имеет такое же поведение или написано в терминах процедур stdio.

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