バックグラウンドプロセスでpkillの出力を抑制したいです。

バックグラウンドプロセスでpkillの出力を抑制したいです。

私が実行するシェルスクリプトがあります

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。これで十分です。

関連情報