赞
踩
刚刚注意到了有关MacOS的评论,虽然我认为@akira(和pv)的解决方案更加整洁,但我想我会在我的MacOS盒中使用tar并向其发送SIGINFO信号来寻找预感和快速解决方法。有趣的是,它可以工作:)如果您使用的是类似BSD的系统,则应该可以,但是在Linux机器上,您可能需要发送SIGUSR1,并且/或者tar可能无法以相同的方式工作。
不利的一面是,它将仅向您提供一个输出(在stdout上),该输出向您显示该文件在当前文件中的距离,因为我猜测它不知道它所获取的数据流的大小。
因此,是的,另一种方法是启动tar,并在您想知道它走多远时定期发送SIGINFO。这个怎么做?
临时的手动方法
如果您希望能够临时检查状态,则可以control-T在相关窗口中单击(如Brian Swift所述),该窗口将发送SIGINFO信号。我认为,与此相关的一个问题是它将其发送到您的整个链中,因此,如果您这样做:
% tar cvf - folder-with-big-files | bzip2 -c > big-files.tar.bz2
您还将看到bzip2和tar一起报告其状态:
a folder-with-big-files/big-file.imgload 0.79 cmd: bzip2 13325 running
14 0.27u 1.02s
adding folder-with-big-files/big-file.imgload (17760256 / 32311520)
如果您只想检查tar您的跑步机是否卡住,或者速度很慢,则此方法效果很好。在这种情况下,您可能不必太担心格式问题,因为这只是快速检查。
那种自动化的方法
如果您知道这将需要一段时间,但是想要一个进度指示器之类的方法,则可以启动tar进程,然后在另一个终端中计算出它的PID,然后将其放入脚本中,该脚本反复发送信号。例如,如果您具有以下脚本(并像说那样调用它script.sh PID-to-signal interval-to-signal-at):
#!/bin/sh
PID=$1
INTERVAL=$2
SIGNAL=29 # excuse the voodoo, bash gets the translation of SIGINFO,
# sh won't..
kill -0 $PID # invoke a quick check to see if the PID is present AND that
# you can access it..
echo "this process is $$, sending signal $SIGNAL to $PID every $INTERVAL s"
while [ $? -eq 0 ]; do
sleep $INTERVAL;
kill -$SIGNAL $PID; # The kill signalling must be the last statement
# or else the $? conditional test won't work
done
echo "PID $PID no longer accessible, tar finished?"
如果以这种方式调用它,则由于仅定位,因此tar您将获得类似以下的输出
a folder-with-big-files/tinyfile.1
a folder-with-big-files/tinyfile.2
a folder-with-big-files/tinyfile.3
a folder-with-big-files/bigfile.1
adding folder-with-big-files/bigfile.1 (124612 / 94377241)
adding folder-with-big-files/bigfile.1 (723612 / 94377241)
...
我承认,这很漂亮。
最后但并非最不重要的一点-我的脚本有点生锈,因此,如果有人想进入并清理/修复/改进代码,请毕生:)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。