私はdd
次のプログラムのマンページを理解しようとしています。
実行中の「dd」プロセスにUSR1シグナルを送信し、I / O統計を標準エラーとして印刷してからレプリケーションを再開します。
$ dd if=/dev/zero of=/dev/null& pid=$! $ kill -USR1 $pid; sleep 1; kill $pid
どういう意味ですかpid=$!
?
これは変数への割り当てですか? pidを取得しますかdd
?最終的に$pid
変数に使用されますか?
また、なぜ使用するsleep
のですkill
か?
使用方法は-USR1
?
ベストアンサー1
dd if=/dev/zero of=/dev/null&
末尾とは、&
バックグラウンドで prefix コマンドを実行することを意味します。 (免責事項:これは過度に単純化された声明です)
引用するこれ:
$!最新のバックグラウンドコマンドのPID。
だからpid=$!
割り当て最新の背景PIDPIDは変数pidにdd
。
そしてなぜ彼らは眠りに落ちて殺すのですか?
あなたはする必要がありますkill $pid
(パラメータが指定されていない場合、killのデフォルト信号はTERMであり、これはプロセスが終了することを意味します。)dd
テストが完了したら、プロセスを終了します。そうしないと、dd
プロセスはバックグラウンドに残り、CPUリソースを消費する可能性があります。プラットフォームのシステムモニターを確認して確認してください。
I / O統計は印刷されますが、Kill -USR1 $pid
プロセスは終了しません。
dd
1秒待機しないと、プロセスが端末に統計出力を書き込む前に、最後のステートメントによってプロセスが終了する可能性があります。kill $pid
これらのプロセスは同期されますが、トラップ+書き込み操作( kill -USR1 $pid
) は次より遅くなることがあります。ジョブ終了(kill $pid
)。したがって、2番目は、統計出力の印刷が完了したことを確認するためにsleep 1
開始を遅らせることです。kill $pid
これが-USR1が使用される方法ですか?
のみman dd
:
実行中の「dd」プロセスにUSR1シグナルを送信し、I / O統計を標準エラーとして印刷してからレプリケーションを再開します。
そしてman 7 signal
:
SIGUSR1 30,10,16 Term User-defined signal 1 SIGUSR2 31,12,17 Term User-defined signal 2
これら2つの文を組み合わせると、USR1が次のようになることを理解する必要があります。カスタム信号その定義は、dd
ユーザーにこれを中断する方法を提供することです。I/O 統計の印刷飛行中。これはプログラム固有のハンドラであり、kill -USR1 other_program_pid
統計出力を期待できるという意味ではありません。
また、に興味がある可能性があります注:SIGUSR1がプロセスを終了するのはなぜですか?。