如果我有一个管道命令,例如
cat myfile | processor_application
Run Code Online (Sandbox Code Playgroud)
其中processor_application 是从标准中读取的东西,以块为单位,进行处理,是否有可能看到文件 cat 已经走了多远?
可能使用lsof?
谢谢!
绝对地!Pipe Viewer正是这样做的。只需将其插入您的管道:
cat myfile | pv | processor_application
Run Code Online (Sandbox Code Playgroud)
您可以cat在上面的示例中优化掉:
pv myfile | processor_application
Run Code Online (Sandbox Code Playgroud)
这具有提供实际进度指示器的优点,因为 pv 可以直接确定输入的大小。如果您确实在管道中间使用 pv,则需要自己提供文件大小以获得准确的进度:
input_process | pv -s 100M -p | processor_application
Run Code Online (Sandbox Code Playgroud)
查看网站以获取更多选项以自定义 pv。
如果该进程已经在运行 lsof 有一size/offset列可能对您有所帮助 - 找到您要检查的 cat 进程的 PID,然后lsof -o -p [PID].
如果该进程尚未运行,pv正如其他人建议的那样,这是一个不错的选择(假设您的系统具有该实用程序)。