在 Linux 上,如何查看进程访问文件的进度?

在 Linux 上,如何查看进程访问文件的进度?

如果我有一个管道命令,例如

   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那么其他人建议的是一个不错的选择(假设您的系统具有该实用程序)。

相关内容