我经常有一个长时间运行的工作,其中一个应用程序读取一个大文件(>2GB)并对每个记录执行处理。
是否有任何 UNIX 命令可用于查看进程可能深入到文件多深?应用程序将只有一个输入文件的文件句柄。
答案1
尝试pv
,管道查看器
答案2
我一直想知道 lsof 的“偏移量”是否会告诉您文件中当前文件句柄的读取位置,但文档并没有真正清楚地说明这一点,而且我从未费心去测试或验证我的假设。http://www.netadmintools.com/html/lsof.man.html
在编写长时间运行的进程时,我倾向于让它们将信息写入我可以定期查看的日志文件(例如 tail -f)或者让它们定期报告进度(例如 -v 选项使其每秒报告一次记录数)。
答案3
这个程序接受管道/STDIN/STDOUT 吗?如果接受,那你真走运。我将使用 md5sum 来演示一个大文件:
$ pv 2GB.zero | md5sum -
1.56GB 0:00:31 [60.2MB/s] [===============================> ] 80% ETA 0:00:07
f3444be3893c1b9b6fa9dd1acde671a9 -
pv "{filename}" 将读取文件,并将其通过管道传输到任何支持管道的设备。您也可以这样做,cat "{filename}"|pv| md5sum -
但这样 pv 就不知道文件有多少字节,因此它只能知道文件传输速度有多快,以及现在还剩下多少字节。
可能性是无穷无尽的。无论何时使用管道或重定向到文件,只需在管道中添加 pv 即可了解数据通过管道的速度!:)