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

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

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

someprog > mylog &

thenmylog不会立即更新,而是会间隔一段时间 - 我猜是因为缓冲。如果我在输出写入日志之前终止程序,那么我就会丢失数据。在 Linux 机器上使用同一个程序时没有出现这样的问题,所以我希望我也可以在 Mac 上让它在运行时更新。有什么想法吗?

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

答案1

一种解决方案是使用 expect 命令unbuffer,它将输出重定向到伪终端。在类 UNIX 操作系统中,终端输出是行缓冲的,而非终端输出是缓冲的(在我的 OpenBSD 工作站上为 4k)

$ sysctl hw.pagesize       
hw.pagesize=4096

也可以看看

答案2

该程序是myprog您自己编写的应用程序吗?

如果是这样,您可以强制它在每个写入语句时刷新输出缓冲区。大多数情况下,默认情况下会缓冲输出以避免过多的 I/O,但在这种情况下,您似乎希望立即获得所有内容。

相关内容