我打算编写一个linux命令,它将处理(使用自定义逻辑)一个非常大的文件。运行此命令后,完成任务将花费数小时。
提供eta输出的最佳方法是什么?
编写100字节进度状态文件的想法怎么样?在特定的阶段,我可以写入文件的字节。比如40%我可以写40个字节到文件。一旦文件大小达到100字节大小,就意味着该过程结束。因此,要监控进度,我们只需检查此文件的大小。
是否有处理此类进度信息的一般方法?我不想在我的程序中包含太多逻辑来显示进度信息。我正在寻找一个简单的解决方案。
有什么建议吗?
答案 0 :(得分:1)
正常的方式是设置像dd
这样的信号处理程序,然后使用kill
命令向进程发送SIGUSR1或者某些东西信号并输出状态信息。尝试
man dd
因此,在我的iMac上,dd
使用SIGINFO
,所以
# Move a whole load of nothing to nowhere in the background
dd if=/dev/zero of=/dev/null &
[1] 11232
# No output, till I want some a few seconds later
kill -SIGINFO 11232
12875835+0 records in
12875834+0 records out
6592427520 bytes transferred in 9.380158 secs (702805581 bytes/sec)
# No more output, till I want some a few more seconds later
kill -SIGINFO 11232
19163866+0 records in
19163865+0 records out
9811898880 bytes transferred in 14.015095 secs (700095068 bytes/sec)
即使在shell脚本中,信号处理程序也很容易设置。例如:
#!/bin/bash
trap "echo Progress report..." SIGINT
echo "My process id is $$"
while : ; do
sleep 10 # Do something - admittedly little :-)
done
答案 1 :(得分:0)
恐怕您在Linux中不能很好地做到这一点,但是如果程序的结果可以是类似于unzip的输出流,那么您就可以使用pv - Pipe Viewer命令。您可以将输出重定向到pv
输入中,它将向您显示进度。
在Windows中,您可以将Taskbar Extensions API与方法SetProgressState
和SetProgressValue
一起使用。