awkツールを使用して複数のプロセスを終了する

awkツールを使用して複数のプロセスを終了する

awkを使って複数のプロセスを停止したいです。私のコマンドは次のとおりです。

sudo ps -ef|grep wget |grep -v grep|awk '{print $2;sudo kill -STOP $2}'

wgetを実行しているすべてのプロセスを停止したいと思います。 awkの$ 2は各プロセスのpidを表します。しかし、私はそれがうまくいかないことがわかりました。プロセスの状態は変わりません。彼らはまだ走っています。

代わりに、次のコマンドを修正しました。

sudo ps -ef|grep wget |grep -v grep|awk '{print $2}'|xargs sudo kill -STOP

効果がある!では、誰がそれらの違いを教えてもらえますか?

ベストアンサー1

あなたの方法には欠けていることがたくさんあります。

  1. ほとんどのシステムでは(/procインストールされていない場合)権限はhidepid必要ありません。rootps

  2. grepプロセスリストの最初のインスタンスを削除するために2つのインスタンスは必要ありません。代わりにこれを行う:grep '[w]get'

  3. grep入力をフィルタリングすることは役に立ちませんawkawkこれは自分で素敵に行うことができます。 (awk '/wget/ {print $2}'またはps質問によるawk '/[w]get/ {print $2}':)

  4. ps出力をフィルタリングしてPIDを渡す代わりに、次のコマンドを使用できます。killkillall wget

  5. sudo一度だけ呼び出すのではなく、各入力行に対して一度だけ呼び出すことになります。awk

最初のパイプラインの主な問題は、awk次のコマンドですawk '{print $2;sudo kill -STOP $2}'。外部コマンドを実行できますが、この方法では実行できawkません。次のawk機能が必要です。system(cmd-line)

使用するには、ps次のようkillにします。

kill -STOP $(ps -ef | awk '/[w]get/ {print $2}')

おすすめ記事