“kill -USR1”-ing dd 的漂亮打印输出

“kill -USR1”-ing dd 的漂亮打印输出

完成后dd,它会打印有关读取和写入段数、总大小和平均写入速度的三行摘要。当它工作时,dd却非常安静。

不久前(我很抱歉)我发现我可以打印dd三行摘要当它仍在工作时通过发射SIGUSR1.自从我这样做

dd <magic incantation> &
watch kill -USR1 $!

问题是,摘要的三行dd没有左对齐。接下来的每一行都从上一行结束的列开始。所以我猜测dd打印一个换行符,但不是回车符,并且任何watch用于打印输出的内容都需要回车符。

我尝试| sed -e '<expression>'在kill命令后面添加不同类型的引用,但我得到的输出根本没有改变。

dd在这种情况下如何才能漂亮地打印输出?

答案1

你不需要kill -USR1知道dd在哪里。您可以使用lsof显示其输入文件描述符的位置。获取可解析的输出有点深奥,但它确实有效。请注意, 是0输入文件描述符;如果您传递一个if=…参数而dd不是让它从标准输入读取,那么根据您的实现dd,它可能会从不同的描述符读取。

lsof -a -o -p $! -d 0 -F o | sed -n 's/^o[0-9]*t//p'

在 Linux 上,您可以直接从 获取此信息/proc

</proc/$!/fdinfo/0 awk '$1 == "pos:" {print $2}'

您不妨使用cat而不是dd它通常更快它不太容易出错

答案2

我在 Ubuntu 20.04 终端中遇到同样的问题。但是从 RXVT 启动可以使显示正常运行:

sudo su - # From the default Ubuntu terminal
dd if=... &
rxvt
watch -n 0.5 kill -USR1 <process number of the dd>

(但是,我不知道为什么。)

相关内容