Ctl + tを押したときにのみddが出力されるのはなぜですか? [コピー]

Ctl + tを押したときにのみddが出力されるのはなぜですか? [コピー]

これはOSXの場合です。これを端末で実行すると

scottcarlson$ sudo dd if=Downloads/CentOS-7-x86_64-Everything-1511.iso of=/dev/disk2 2> Desktop/out.txt

それではこれは別のものです。

tail -f Desktop/out.txt

Ctlt最初の端末を押したときにのみログを更新しますdd。性格のせいでしょうかdd

デバイスに正確に書き込む方法はわかりませんが、プロセスにしばらく休んでログに書き込むように要求するのはあまりにも無理ですか?

答え1

最初の端末で dd で Ctlt を押したときにのみログを更新します。 ddの性質のせいでしょうか?

はい。その本質は、dd与えられた信号が受信されると現在の状態を出力することです。ほとんどのオペレーティングシステムでは、このシグナルはSIGUSR1標準シグナルですが、OS Xでは非標準シグナルを使用しますSIGINFO。また、OS Xには、すべてのオペレーティングシステムから送信されるように、キーの組み合わせをtty使用して特定の信号を送信できるドライバ設定があります。CtrlTCtrlCSIGQUIT

デバイスに正確に書き込む方法はわかりませんが、プロセスにしばらく休んでログに書き込むように要求するのはあまりにも無理ですか?

ショートカットを使用して正確にそのタスクを実行するように依頼しています。定期的に自動更新が必要な場合は、次の単純なシェルループを実行するのを防ぐ方法はありません。

while kill -INFO $(pgrep dd); do sleep 5; done

これはpgrepOS Xで利用可能であると仮定します。それ以外の場合は、コマンドを選択してpidそれを2番目の引数ddとして使用します。kill

答え2

表示される内容は、出力ctltではなく実行中のプロセス情報の要約です。dd

dd予期したのとは異なり、進捗情報は出力されません。

別のターミナルウィンドウで実際の進行状況を表示するには、出力ファイルサイズの変更を確認してください。この場合、生のディスクに書き込むので、忍耐力が最高の友達になることができます。

答え3

OS-Xで実行すると、次のキーの組み合わせstty -aが表示されます。^Tstatus

% stty -a | grep '\^T'
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;

~からman dd

 If dd receives a SIGINFO (see the status argument for stty(1)) signal,
 the current input and output block counts will be written to the standard
 error output in the same format as the standard completion message.  If

両方を組み合わせて使用​​すると、実行時にクリックすると書き込みの概要dd^T表示されます。

関連情報