bashスクリプトでPIDを表示する

bashスクリプトでPIDを表示する

皆さん、こんにちは。

私は Java のすべてのプロセスを表示する bash スクリプトを作成しようとしていますが、以下のように表示したいと思います。

 ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

上記の問題は、特定の PID が 1 つしか表示されないことです。

ps aux|grep j\[a\]vaしたがって、それぞれの PID を取得し、上記のコマンドで各 PID を実行したいと思います。

結果:

 root@reinhardt-VirtualBox:/home/reinhardt# ps -p 1959 -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
  PID MEMORY USER     GROUP    COMMAND         ARGS
 1959  13648 root     root     grep            grep --color=auto java

for ループのような何らかのループが作成されると思いますか?

答え1

これをテストできる場所ではありませんが、これは動作するはずです。 readこれはシェルスクリプトの標準的な部分であり、stdin(ストリームまたは/dev/ttyなどのデバイス)から何かを変数に配置します。次に、whileループを実行します。

ps auwwx | gawk '/[j]ava/{print $1}' | while read PID
do
    ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done

あるいは、UNIX に pgrep がある場合は、もっと簡単に言えば次のようになります。

pgrep java | while read PID
do
    ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
done

このような場合にはを使用できる場合がありますxargs。デフォルトでは、xargs はコマンドの最後に引数のグループを配置することを覚えておいてください。したがって、一度に 1 つずつ (-n1 を使用) 入力し、-i を使用して PID を必要な場所に配置する必要がありま す。

pgrep java | xargs -n1 -i{} ps -p {} -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS

(繰り返しますが、-i 構文が間違っていたら申し訳ありません。今はテストできません。エラーが発生した場合は、man ページを確認してください)

関連情報