![パイプ演算子を使用するのはなぜ機能しないのですか? [コピー]](https://linux33.com/image/165573/%E3%83%91%E3%82%A4%E3%83%97%E6%BC%94%E7%AE%97%E5%AD%90%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AF%E3%81%AA%E3%81%9C%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
私が一般的に使用するのは、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