如何在Mac上记录没有缓冲的后台进程的STDOUT?

时间:2010-10-01 14:15:55

标签: macos logging buffer stdout flush

我在Mac上运行后台进程,并且日志更新有问题。如果我跑

someprog > mylog &

然后mylog不会立即更新,但有一些间隔 - 我想这是由于缓冲。与at now相同。如果我在输出写入mylog之前终止程序,那么我就会丢失数据。 Linux机器上的同一程序没有这样的问题,所以我希望我也可以在Mac上运行时更新它。知道怎么样?

someprog是一个F77计划,不是我写的。

我在SuperUser上提出了tried to ask这个问题,但没有人可以帮助我。

EDIT1:我不想改变消息来源,但请记住。日志在Linux机器上运行良好,因此它也可以在Mac上运行。它必须是系统设置,例如缓冲区大小?我可以将缓冲区大小限制为较小的值 - 现在我必须等待数小时才能看到日志中的内容。

2 个答案:

答案 0 :(得分:2)

如果您有权访问源代码,则可以在每次printf之后添加对fflush(stdout)的调用。如果你不这样做,你可以用LD_PRELOAD尝试一些棘手的问题...基本上,制作你自己的printf()版本,调用libc的printf ...并执行刷新...然后在运行时LD_PRELOAD该库...该应用程序将使用你的...有点冒险... ...

答案 1 :(得分:2)

这是写入非tty流的POSIX C程序的通常行为 - 我猜F77共享相同的行为,或者是根据stdio例程编写的。

我不知道正确的答案是什么 - 我猜你需要通过假装是tty的东西来管道输出,但是我不知道什么(如果有的话)实用程序提供了这个选项。