パイプ演算子を使用するのはなぜ機能しないのですか? [コピー]

パイプ演算子を使用するのはなぜ機能しないのですか? [コピー]

私が一般的に使用するのは、pidofプロセスのpidを取得してKILL -SIGTERM <pid>殺すことです。

パイプは、あるコマンドの出力を別のコマンドの入力として使用すると仮定されます。

それでは、次のコマンドが機能しないのはなぜですか?

pidof firefox | kill -SIGTERM

答え1

パイプは、あるコマンドの出力を別のコマンドの入力として使用すると仮定されます。

これは正確ですが、kill標準入力のどの入力も受け入れません。代わりに、コマンドライン引数として指定する必要があります。

kill -SIGTERM "$(pidof firefox)"

または:

pidof firefox | xargs kill

$(これはシェル内のコマンド拡張ですが、xargs外部です。

ただし、これらの方法には、pidが複数ある場合やpidがない場合に実行する操作など、極端な場合がよくあります。これがpkillが存在する理由です。

pkill -TERM firefox

答え2

実行する方が良いです:

 kill $(pidof firefox)

または

pkill firefox

答え3

多様性のために: 走るのはいかがですか:

kill -SIGTERM "$(pgrep -f firefox)"

大文字と小文字を区別しないかどうかはわかりません。

kill -SIGTERM "$(pgrep -fi FirEfox)"

複数のプロセスが同じ名前で実行されており、最初のプロセスを終了しようとしています。

kill -SIGTERM "$(pgrep -f firefox | head -1)"

私に関する情報pgrep

$ pgrep -V
pgrep (proctools 0.4pre1) http://proctools.sourceforge.net

関連情報