在 Linux 上,如何查看进程在文件中的距离?

wod*_*dow 13 linux lsof pipe

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

   cat myfile | processor_application
Run Code Online (Sandbox Code Playgroud)

其中processor_application 是从标准中读取的东西,以块为单位,进行处理,是否有可能看到文件 cat 已经走了多远?

可能使用lsof?

谢谢!

use*_*517 13

您可以使用pv来执行此操作,例如

pv file | processor_application

当 pv 将它的 stdin 直接传递给它的 stdout 时,您不需要使用 cat。

编辑 由于您的程序已经在运行,然后找到cat进程的 PID,然后查看其中的内容

/proc/<PID>/io

它会告诉你它写了多少字节 - wchar。


Phi*_*ack 9

绝对地!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。

  • 答案太多了,[但在这里。](http://purl.net/net/grawity/not-a-blog.html#post:20110131) (2认同)

vor*_*aq7 6

如果该进程已经在运行 lsof 有一size/offset列可能对您有所帮助 - 找到您要检查的 cat 进程的 PID,然后lsof -o -p [PID].

如果该进程尚未运行,pv正如其他人建议的那样,这是一个不错的选择(假设您的系统具有该实用程序)。