通过文件跟踪程序的进度?
问题描述:
有没有办法找出程序读取文件的位置?它似乎可以与strace或dtrace可行?通过文件跟踪程序的进度?
为了澄清问题并给予动机,说我有一个10GB的日志文件,并就指望的唯一的行数:
$ cat log.txt | sort | uniq | wc -l
我可以检查该文件cat
在目前是,有效给命令的进展?使用lsof
,我似乎无法得到最后一个文件的读取,我认为这是什么会做的伎俩的偏移:
$ lsof log.txt
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cat 16021 erik 3r REG 0,22 13416118210 1078133219
编辑:我很抱歉,我给的例子过于狭窄,没有切中要害。理想情况下,对于任意程序,我希望看到文件读取发生的位置(不管管道)。
答
相反猫:
pv log.txt | sort | uniq | wc -l
管道与PV:
SIZE=$(ls -l log.txt | awk '{print $5}'); cat log.txt | sort | pv -s $SIZE | uniq | wc -l
所以你想要窥探第三方流程的I/O?我没有看到想要监视猫进程的理由。是否有更真实的解释你真正的追求? – 2013-03-27 21:22:32
这是我真实的世界的解释。我现在已经运行了这个命令大约30分钟,并且很高兴看到它通过文件所取得的进展。另一个例子:用户正在从Web服务器下载一个大文件,我如何检查上次读取的内容以确定下载进度? – erikreed 2013-03-27 21:24:56