これにより、dd if=/dev/zero of=/dev/null
結果が端末に表示されます。しかし、特定の時間内にこのコマンドを実行して結果を表示したいと思います。たとえば、私は試しました
timeout 10s dd if=/dev/zero of=/dev/nul
しかし、端末ではstdout / stderrを取得できません。
「--preserve-status」、「--foreground」、「-v --verbose」など、いくつかのタイムアウトオプションを試してみましたが、まだ端末に出力がありません。
結果を端末やファイルに表示する方法はありますか?
答え1
--foreground
信号と共にのオプションを使用してくださいtimeout
。INT
dd
timeout --foreground -s INT 0.1 dd if=/dev/zero of=/dev/null
文書には次timeout
のように記載されています。
--foreground
when not running timeout directly from a shell prompt,
allow COMMAND to read from the TTY and get TTY signals;
in this mode, children of COMMAND will not be timed out
私が見たトレースなどでは、これは信号を取得するプロセスをdd
必要としないようです。--foreground
INT
しかし、CONT
どちらもプロセスをすばやく終了させますdd
。timeout
まれに、dd
実際に信号を処理する時間がありますが、INT
これは標準ではありません。
--foreground
終了する前に統計を送信せずに印刷する時間がありましたCONT
。dd
上記の関数はcleanup
最初の反復呼び出しで呼び出されます。sigsuspend
。
dd
Sprocess_signals()
ほとんど呼び出されない後ろに interrupt_signal
CONT
処理時間にすでに設定されていますtimeout
(つまり、--foreground
設定されていません)。
答え2
dd
出力をstderrに表示するには(たとえば、割り込みプロセスを使用するdd
)、デフォルトのCtrl+CSIGTERMの代わりにSIGINT信号を使用します。
timeout -s INT 10s dd if=/dev/zero of=/dev/null
stderrをfileにリダイレクトするには、logfile
次のようにします。
timeout -s INT 10s dd if=/dev/zero of=/dev/null 2> logfile
答え3
この試み:
timeout -s INT --foreground 10s dd if=/dev/zero of=/dev/null