Linux でプロセスごとの実メモリー使用量 (RSS) を調べるのに、ps と grep を使う方法を先日書いた。
sawfish の RSS を調べるには、ps alx | head -1 && ps alx | grep sawfish とするんだったね。実行結果は次のようになる。
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 0 666 3173 3147 15 0 11596 4976 - S ? 1:16 sawfish 0 666 4185 1733 23 5 5708 716 - RN pts/507 0:00 grep sawfish
この方法の欠点は、grep しているプロセス自身も引っかかってしまうこと (上例の最下行)。これは、見苦しいね。
この件について、OKAMURA さんが、コメントでアドバイスを下さった。ここに引用しやう。
s + grep で目的のプロセスだけの情報を抜き取るとき
grep sawfishではなく
grep [s]awfishとすると grep の情報が出ないので便利ですよ。
ぼくの環境だと、[] が zsh に展開されてしまうので、grep "[s]awfish" とする必要があったけど、いいこと教えて頂いた。OKAMURA さん、ありがとう。
shell script psl
さて、複数プロセスのメモリ使用量を調べる場合、コマンドラインがちょっと複雑になる。そこで、psl なる shell script を組んでみた。次のようにして使う。
$ psl firefox emacs F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 0 666 12520 3179 25 5 5116 952 wait4 SN pts/14 0:00 /bin/sh /usr/local/bin/firefox/firefox 0 666 12523 12520 26 5 6356 1112 wait4 SN pts/14 0:00 /bin/sh /usr/local/bin/firefox/run-mozilla.sh /usr/local/bin/firefox/firefox-bin 0 666 12528 12523 20 5 363576 173512 - SN pts/14 20:18 /usr/local/bin/firefox/firefox-bin 0 666 23237 3179 20 5 56436 50380 - SN pts/14 107:12 emacs
ソース・コードは下記:
#!/bin/sh ps='ps alx' psl=$0 $ps | head -1 for i in $* do command='['${i:0:1}']'${i:1} $ps | grep -v $psl | grep $command done
${var:1}
は変数 $var
から文字を切り出す bash の組み込み機能。${変数名:切り取り開始:切り取り終了} という書式。開始位置は 0 から数える。「切り取り終了」は省略可能。つまり、$var=foo
なら ${var:1}
は oo を返す。${var:0:1}
なら、f を返す。
No comments:
Post a Comment