pgrep と kill を連鎖できますか?

pgrep と kill を連鎖できますか?

最初のコマンドの結果を別のコマンドに送信するために使用されていることに気付きました|。名前に一致するすべてのプロセスを終了したいと思います。
通常、pgrep は次のことを行います。

$ pgrep name
5089
5105

複数の引数は次のように動作するようですkill:

sudo kill 5089 5105

しかし、これは間違いです。

pgrep name | kill

では、どうすれば適切に実行できるのでしょうか?

答え1

これを試して:

pgrep name | xargs kill

を使用するとpgrep name | kill、 の出力がpgrep nameの stdin に送られますkill。はkillstdin から引数を読み取らないため、これは機能しません。

を使用するとxargs、stdin から の引数が構築されますkill。例:

$ pgrep bash | xargs echo
5514 22298 23079

答え2

これは動作するはずです:

pkill name

man ページを読むこともお勧めします。

答え3

具体的な質問ではなく、一般的な質問にお答えします。

パイプは、あるプログラムからの出力を渡すためのものです。入力別のプログラムに。

あるプログラムの出力を次のように使用しようとしているようですコマンドライン引数別のプログラムに、それは異なります。

そのためには、コマンド置換

例えば、実行したい場合

sudo kill 5089 5105

pgrep nameそして、出力するコマンドがあります5089 5105

これらを組み合わせると

sudo kill $(pgrep name)

関連情報