はじめに
以下のようにプロセスの起動状況を調査するpsコマンドですが、環境によっては使用できなかったりコマンドが削除されている場合があります。
$ ps xx PID PPID PGID WINPID TTY UID STIME COMMAND ....
本記事ではpsを使用せずに上がっているプロセスを調査する流れについて記載します。
/procディレクトリを利用する
結論から言えばルートディレクトリ直下にあるprocディレクトリ配下を確認します。
例えばpsコマンドが入っている環境におけるpsコマンドと/procディレクトリ配下の一覧の取得結果を並べます。
PID TTY STAT TIME COMMAND 1 ? Ss 0:00 /bin/bash /hoge.sh 18585 ? Sl 0:00 xx 18593 ? S 0:00 xx 18594 ? S 0:00 xx 18595 ? S 0:00 xx 19089 ? Ss 0:05 xx 19093 ? S 0:00 xx 19094 ? S 0:01 xx 19095 ? S 0:00 /usr/sbin/sshd -D 42796 pts/0 Ss 0:00 /bin/bash ... 45287 pts/0 R+ 0:00 ps -x
]# ls -l /proc total 0 dr-xr-xr-x 9 root root .. 1 dr-xr-xr-x 9 root xx .. 18585 dr-xr-xr-x 9 xx xx ..18587 dr-xr-xr-x 9 root xx ..18593 dr-xr-xr-x 9 root xx ..18594 dr-xr-xr-x 9 root xx ..18595 dr-xr-xr-x 9 xx xx ..18597 dr-xr-xr-x 9 xx xx .. 18605 dr-xr-xr-x 9 root root ..19089 dr-xr-xr-x 9 root root .. 19093 dr-xr-xr-x 9 root root ..19094 dr-xr-xr-x 9 root root .. 19095 dr-xr-xr-x 9 root root .. 42796 ... dr-xr-xr-x 2 root root .. acpi -r--r--r-- 1 root root .. buddyinfo dr-xr-xr-x 4 root root .. bus -r--r--r-- 1 root root .. cgroups
procディレクトリ内部の情報
上記にて数字の名前がついているディレクトリがありますが、それらは実行中のプロセス番号と一致しています。要はプロセスの生成によって作成されるディレクトリです。
このディレクトリは以下記事でも触れたように中にはプロセスの情報を表すファイルが存在し
例えば配下にあるcmdlineファイルにはそのプロセスを作成したコマンド名が格納されています。
同じくstatusファイルにはそのプロセスの詳細情報が格納されているので興味がある方は中身を見てみてください。
# cat status Name: hoge.sh Umask: 0022 State: S (sleeping) Tgid: 1 Ngid: 0 Pid: 1 ...
終わりに
/procディレクトリ配下にはプロセス関連の生ファイルが動的に変化する情報として格納されているので、ぜひ興味があれば触ってみてください。
以上、ご参考になれば幸いです。