1

我在 Mac 上运行后台进程,但日志更新出现问题。如果我跑

someprog > mylog &

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

someprog是一个F77程序,不是我写的。

试图在 SuperUser 上问这个问题,但没有人可以帮助我。

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

4

2 回答 2

2

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

于 2010-10-01T14:22:13.207 回答
2

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

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

于 2010-10-01T14:23:19.903 回答