バックグラウンドパイプラインコマンドシーケンスからすべてのコマンドのPIDを取得します。

バックグラウンドパイプラインコマンドシーケンスからすべてのコマンドのPIDを取得します。

にある場合は、bash次を実行します。

cmd1 | cmd2 | ... | cmdi | ... | cmdn &

明確ではないかもしれませんcmd{1..n}。 PIDをどのように取得しますかcmdi?または、どのようにcmdiプロセスにシグナルを送信できますか? (例:送信SIGUSR1?) pkill/ pgrepetcは、同じパイプラインの一部を含む他のインスタンスが実行されている可能性があるため、pidof良い答えではないようです。のPIDを教えcmdiてください。jobs -pcmd1

iでは何でも構いません{1..n}

ベストアンサー1

質問の元のバージョンでは、最後のコマンドのPIDのみが必要なときに特別な変数が$!完璧です。

foo | bar | baz &
baz_pid=$!

他のプロセスのPIDに簡単にアクセスできる同様の方法はありません。

$pipestatus(zsh)と(bash)を追加するのに長い時間がかかり、最終的にパイプラインのすべての終了$PIPESTATUS状態に加えて、$?元のBourneシェル以降にあった最後の終了状態にアクセスできるようになりました。おそらく同様のことが最終的に起こります$!

おすすめ記事