“kill -USR1”-ing dd의 예쁜 출력물

“kill -USR1”-ing dd의 예쁜 출력물

완료되면 dd읽고 쓴 세그먼트 수, 총 크기 및 평균 쓰기 속도에 대한 3줄 요약이 인쇄됩니다. 작동할 때는 dd매우 조용합니다.

얼마 전에 (죄송합니다) dd세 줄 요약을 인쇄할 수 있다는 것을 알았습니다.아직 작동하는 동안SIGUSR1내가 이것을 한 이후로 .

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

문제는 요약의 세 줄이 dd왼쪽 정렬되지 않는다는 것입니다. 각 후속 행은 이전 행이 끝난 열에서 시작됩니다. 따라서 줄 바꿈 dd은 인쇄되지만 캐리지 리턴은 인쇄되지 않으며 watch출력을 인쇄하는 데 사용되는 모든 항목에는 캐리지 리턴이 필요합니다.

kill 명령 후에 다양한 유형의 참조를 추가해 보았지만 | sed -e '<expression>'얻은 출력은 전혀 변경되지 않았습니다.

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>

(근데 왜인지는 모르겠습니다.)

관련 정보