にある場合は、bash
次を実行します。
cmd1 | cmd2 | ... | cmdi | ... | cmdn &
明確ではないかもしれませんcmd{1..n}
。 PIDをどのように取得しますかcmdi
?または、どのようにcmdi
プロセスにシグナルを送信できますか? (例:送信SIGUSR1
?)
pkill
/ pgrep
etcは、同じパイプラインの一部を含む他のインスタンスが実行されている可能性があるため、pidof
良い答えではないようです。のPIDを教えcmdi
てください。jobs -p
cmd1
i
では何でも構いません{1..n}
。
ベストアンサー1
質問の元のバージョンでは、最後のコマンドのPIDのみが必要なときに特別な変数が$!
完璧です。
foo | bar | baz &
baz_pid=$!
他のプロセスのPIDに簡単にアクセスできる同様の方法はありません。
$pipestatus
(zsh)と(bash)を追加するのに長い時間がかかり、最終的にパイプラインのすべての終了$PIPESTATUS
状態に加えて、$?
元のBourneシェル以降にあった最後の終了状態にアクセスできるようになりました。おそらく同様のことが最終的に起こります$!
。