量子化された無意味な人生

意味深だけど意味が無いブログだよ(:-Q)

実行中のPIDとパスとその他を表示するスクリプト作った

修論のために計算するのは良いんだけど,鶏頭故に今動かしてるものが何かわからなくなっちゃうことが頻発したので作りました.
ついでにメモリ使用量とCPU%と経過時間も取得できるようにしました.

コード

正規表現に一部不完全な部分があったので修正

#!/bin/bash

getop=0

while getopts "t" opts
  do
  case $opts in
      t) 
          getop=1
          ;;
  esac
done

procid=`ps xr | awk '!/( ps |PID| top )/ {print $1}'`

if [ $getop == 1 ] ; then
    status=`top -b -n 1`
    printf "%7s%5s%8s%13s   PATH\n" "PID" "Mem" "CPU%" "TIME"
else
    printf "%6s   PATH\n" "PID"
fi

for p in ${procid[@]}; do
    printf "\033[32m%6d\033[0m: " $p
    if [ $getop == 1 ] ; then
        echo "$status" | awk "/^ *$p / {printf(\"%5s%8s%13s  \",\$6,\$9,\$11)}"
    fi
    ls -l /proc/$p/cwd | awk '{print $11}'
done

あれ?はてな記法でスーパープレ記法使ってるのにプレビューでシンタックスハイライトされない….
シェルスクリプトのシンタックスハイライトshはあるけどbash単体のハイライトはないことに気づいた.

表示例

$ pidpath
   PID   PATH
  2515: /home/hoge/foo
  8030: /home/hoge/bar
  8060: /home/hoge/fugafuga
  8103: /home/hoge/gonyo
$ pidpath -t
    PID  Mem    CPU%         TIME   PATH
  2515:  2.5g   100.0      1711:43  /home/hoge/foo
  8030:  484m   100.0     21:38.22  /home/hoge/bar
  8060:  484m   100.0     21:34.03  /home/hoge/fugafuga
  8103:  484m   100.0     20:59.18  /home/hoge/gonyo

使い方とかその他雑談

適当な名前で保存して~/bin/にでも突っ込んで実行権限つけて実行してください.
別に著作権主張するほどのもんじゃないんでがんがん使ったり改造したりパクったりしてください.ただしわたしに因縁つけないでください.
hogehoge -t でメモリとCPU%と時間を取得します.つけないとPIDとパスだけです.

初めてgetopts使ったけど,これでいいのかな?とりあえず思った通り動く
これからはgetopts積極的に使おうっと
あとこんなにawk使ったのも初めて.awkってはまるとやばいって聞いたんで怖いです><