実行中の実行ファイルの数を取得したい
前書き
普段Unix環境で計算をしているのですが、同じ名前の実行ファイルを複数実行する場合があります。実行中はCtrl+Zで中断しなければjobsコマンドも使えず、何個実行ファイルを実行しているのか分からなくなる時があります。特に実行ファイルの個数をshファイルで制御したかったので、既存のUnixコマンドを利用してその数を取得することにしました
結論(簡易措置)
!#/bin/sh
name="[filename]"
n_exe=`pstree [user] | grep $name | sed s/$name//g | sed s/[^0-9]//g` #n_exeに実行されている[filename]の数が代入される
echo n_exe
簡単な解説
- pstree [user]コマンドを使うことによって、自分が実行しているプロセスのみを表示します。これは共用の計算機を利用している場合のコマンドで、個人用の端末なら[user]をつけなくても問題はないです。ただし、システムプロセスも表示されるので、デバッグを考えるならつけたほうが分かりやすいと思います。
- grep にパイプで渡すことによって、pstree [user]で得た情報から[filename]が含まれている行を抜き出します。
- sed コマンドにパイプで渡し、実行ファイル名を削除します。実行ファイル名に数字が含まれていない場合はなくても大丈夫です。
- 最後に残った行からsedコマンドで数字以外の文字を削除します。
問題点
これがなぜ簡易措置かというと、pstreeコマンドで取得できるデータの形式上、実行ファイルが1個のときもn_exe=0となってしまいます。2個以上であれば目的通り動作し、1個だけの時はわざわざこのコマンドを使う必要もないのでとりあえずこのまま使用します。
もし何か問題点・改善点が見つかれば追記したいと思います。