如果我有一个管道命令,例如
cat myfile | processor_application
其中,processor_application 是从标准输入中以块形式读取以进行处理的东西,是否可以看到 cat 已经读取了文件多远?
可能使用 lsof?
谢谢!
答案1
您可以使用光伏要做到这一点,例如
pv file | processor_application
由于 pv 将其 stdin 直接传递到其 stdout,因此您无需使用 cat。
编辑
由于你的程序已经在运行,然后找到进程的PID cat
,然后查看
/proc/<PID>/io
它将告诉您已写入了多少字节 - wchar。
答案2
绝对地!管道查看器确实如此。只需将其插入管道即可:
cat myfile | pv | processor_application
您可以优化cat
上面例子中的内容:
pv myfile | processor_application
它的优点是提供了实际的进度指示器,因为 pv 可以直接确定输入的大小。如果您在管道中间使用 pv,则需要自己提供文件大小才能获得准确的进度:
input_process | pv -s 100M -p | processor_application
请访问网站以获取更多定制 pv 的选项。
答案3
如果进程已在运行,lsof 中有一size/offset
列可能会对您有帮助 - 找到您要检查的 cat 进程的 PID,然后lsof -o -p [PID]
。
如果该进程尚未运行,pv
那么其他人建议的是一个不错的选择(假设您的系统具有该实用程序)。