我有一个在嵌入式 Linux 系统上运行的二进制进程(没有可用的源代码)。该进程会打开一个日志文件 (/tmp/dmaosd.log),在其中记录其正在执行的操作。
问题是日志以块的形式更新(一次大约 1000 字节),所以我无法使用 tail -f 实时查看日志。
我想知道是否有任何方法可以强制正在运行的进程刷新其数据(基于访问 /proc/1234/fd/3)而无需访问其源并且不向其发送任何信号(我不确定是什么信号它支持也不支持他们应该做什么)。
有问题的进程是媒体播放器的 OSD,日志信息通常显示屏幕上选择/显示的元素,因此尽快获得数据会很好。
谢谢!
这实际上取决于缓冲区的位置:如果应用程序使用自己的日志缓冲区,则无法强制刷新。
如果缓冲是由 C 库完成的,那么您可以使用 LD_PRELOAD 来禁用缓冲。假设程序正在使用
fopen()
它来打开它的日志文件,你可以这样做:编译为共享库,然后使用 LD_PRELOAD 将其“注入”到程序中:
如果需要,您还可以检查文件名并仅为您感兴趣的日志文件更改缓冲。