我在 Mac 上运行后台进程,日志更新出现问题。如果我运行
someprog > mylog &
thenmylog
不会立即更新,而是会间隔一段时间 - 我猜是因为缓冲。如果我在输出写入日志之前终止程序,那么我就会丢失数据。在 Linux 机器上使用同一个程序时没有出现这样的问题,所以我希望我也可以在 Mac 上让它在运行时更新。有什么想法吗?
someprog
是一个F77程序,不是我编写的。
答案1
一种解决方案是使用 expect 命令unbuffer
,它将输出重定向到伪终端。在类 UNIX 操作系统中,终端输出是行缓冲的,而非终端输出是缓冲的(在我的 OpenBSD 工作站上为 4k)
$ sysctl hw.pagesize
hw.pagesize=4096
也可以看看
答案2
该程序是myprog
您自己编写的应用程序吗?
如果是这样,您可以强制它在每个写入语句时刷新输出缓冲区。大多数情况下,默认情况下会缓冲输出以避免过多的 I/O,但在这种情况下,您似乎希望立即获得所有内容。