タイムアウトを使用して端末にコマンド出力を表示する方法

タイムアウトを使用して端末にコマンド出力を表示する方法

これにより、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信号と共にのオプションを使用してくださいtimeoutINTdd

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必要としないようです。--foregroundINTしかし、CONTどちらもプロセスをすばやく終了させますddtimeoutまれに、dd実際に信号を処理する時間がありますが、INTこれは標準ではありません。

--foreground終了する前に統計を送信せずに印刷する時間がありましたCONTdd

上記の関数はcleanup最初の反復呼び出しで呼び出されます。sigsuspend

ddSprocess_signals()ほとんど呼び出されない後ろに interrupt_signalCONT処理時間にすでに設定されています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

関連情報