我目前正在处理一个大型数据集,即使文件格式转换每个主题至少需要一个小时,因此我经常不确定我的命令是否已执行或程序已冻结。我想知道是否有人对如何跟踪我试图在 linux 中运行的命令/脚本的进度有提示?
您的帮助将不胜感激。
如果持久命令在文件中产生一些输出foo.out
,您可以执行watch ls -l foo.out
或tail -f foo.out
您还可以列出/proc/$(pidof prog)/fd
以找出一些打开的文件prog
除了@basile-starynkevitch 的回答,
我还有一个 bash 脚本,可以测量您处理了多少文件(以百分比为单位)。
它监视procfs
从 fd 信息 ( /proc/pid/fdinfo
) 中获取当前位置,并以相对于总文件大小的百分比计算。
见https://gist.github.com/azat/2830255
curl -s https://gist.github.com/azat/2830255/raw >| progress_fds.sh \
&& chmod +x progress_fds.sh
Usage:
./progress_fds.sh /path/to/file [ PID]
对某人有用
您可以使用 跟踪程序的系统调用strace
,这将使您能够跟踪open
调用。
您可以使用详细输出,但它会使事情变得更慢。
我想这不能有一个普遍的答案,它只取决于程序的类型(它甚至不需要对 Linux 做任何事情,请参阅“停止问题”)。
如果您在转换过程中碰巧使用了管道,我发现该pv(1)
工具非常有用。即使pv
不知道数据的总大小,也有助于查看是否有实际进展以及数据率有多好。但它不是大多数标准安装的一部分,可能必须明确安装。