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


13

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

   cat myfile | processor_application

在哪里,processor_application是从标准块中逐块读取到进行处理的内容,是否有可能看到cat文件有多远?

可能使用lsof?

谢谢!


到目前为止,谢谢您的回答!但是,我应该更加清楚:该命令已经在运行。
wodow 2011年

啊,是的,光伏不是那么方便。您可能需要编辑您的原始问题,以使其更加清晰。
Phil Hollenback

实际上,此问题现在有三个很好的单独答案,所以我将保持原样。
wodow 2011年

1
概括起来,它们是:1.使用pv(在开始之前)2.使用lsof -o(如果支持偏移量)3.在/ proc / <PID> / io上查看wchar的值,以获取猫的已知PID过程
wodow 2011年

Answers:


13

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

pv file | processor_application

当pv通过时,它直接是stdin到stdout,您不需要使用cat。

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

/proc/<PID>/io

它将告诉您已写入多少字节-wchar。


我只看到您的编辑!鉴于(i)链中没有PV,(ii)lsof -o有效,这可以完美地工作。谢谢!
wodow 2011年

9

绝对!Pipe Viewer做到了这一点。只需将其插入您的管道中即可:

cat myfile | pv | processor_application

您可以cat在上面的示例中优化:

pv myfile | processor_application

这具有提供实际进度指示器的优势,因为pv可以直接确定输入的大小。如果确实在管道中间使用pv,则需要自己提供文件大小才能获得准确的进度:

input_process | pv -s 100M -p | processor_application

检查网站以获取更多自定义光伏的选项。


我喜欢pv何时可用:-)
voretaq7 2011年

pv使用mkfifogdb(带有gdb的四个syscall p)插入到管道中非常容易。
user1686'1

@草率,你不能这样嘲笑。写下真实答案并进行演示-我现在很好奇。
Phil Hollenback

2
太多的技巧无法解决,但是在这里。
user1686'1

6

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

如果该进程尚未运行,pv则建议使用其他方法(假设您的系统具有该实用程序)。


这是我查看过的lsof选项。但是:如果lsof -o在系统上不允许或不可用怎么办?
wodow 2011年

如果-o在您的系统上不起作用,我认为您在使用lsof:-/时非常cat
费劲

是的,都尝试过。我正在搜索lsof警告-o的原因,因为现在不可用...
wodow 2011年

lsof常见问题解答(在gd.tuwien.ac.at/utils/admin-tools/lsof/FAQ上进行了镜像)暗示在问题3.43.2.3中,lsof -o在Linux上是不可能的!我认为这过于宽泛,因为其他用户似乎正在使用lsof -o
wodow 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.