私が実行するシェルスクリプトがあります
iostat -c 1 > data.cpu. &
スクリプトの後半で関心のあるデータを収集したら、次の手順を実行します。
pkill iostat
iostatを終了し、data.cpuの処理を続行し、stdoutに記録されたレポートを生成できます。レポートの一部には以下が含まれます。
[1]+ Terminated iostat -c 1 > data.cpu
pkillによって作成されました。審美的な理由で「終了しました」というメッセージが表示されないようにしたいです。いろいろなリダイレクトを試しましたが、これまで成功していませんでした。
出力でこの部分を防ぐ方法はありますか?
答え1
@クワジモド一度見てください。https://stackoverflow.com/q/81520私はこれが役に立たないと思います。ただし、その投稿の提案の1つは次のとおりです。https://stackoverflow.com/q/5719030/1997354
これはdisown
(マニュアルページ)私の問題を正確に解決するために。今すぐ:
iostat -c 1 > data.cpu &
disown
# collect required data
pkill iostat
拒否を使用することに加えて、抑制する方法があります。終了disownメッセージを使用しないでください。つまり、以下のようにpkillの代わりにkillを使用してください。
iostat -c 1 > data.cpu &
iostat_pid=$(pidof)
# collect required data
kill -9 $iostat_pid
答え2
接続した質問に対する回答で説明したように、これらのメッセージの表示はコマンドで制御できますwait
。
したがって、1つのアプローチは、iostat
バックグラウンドで実行し、wait
リダイレクトされたstderrを使用してすぐに実行して待機しないように、完全な複合コマンドをバックグラウンドで再実行することですwait
。
それは:
(iostat -c 1 > data.cpu & wait 2>/dev/null) &
それ以降は、以前と同じように進めてくださいpkill iostat
。
実際、iostat
シェルではなく子プロセスが親プロセスになるようにプロセスを正確に見つけるように注意してくださいiostat
。 Aは現在実行中のすべてのプロセスをpkill iostat
終了しますiostat
。これで十分です。