Dockerコンテナ上で動作している Webアプリケーションで、プロセスが kill されたときの挙動を調べたかった。
が、kill コマンドはあるのだが、ps コマンドが無いので、プロセスIDを取得することができなかった。ps を入れても良いのだが、共有の開発用のコンテナだったので、あまり余計なものを入れたくない。
ちょっと調べてみると /proc
以下を見ればいいよ、ということがわかった。
$ ls -la /proc/
total 0
dr-xr-xr-x 618 root root 0 Jun 20 06:51 .
drwxr-xr-x 1 root root 28 Jun 20 06:51 ..
dr-xr-xr-x 9 root root 0 Jun 20 06:51 1
dr-xr-xr-x 9 root root 0 Jun 20 06:54 126
dr-xr-xr-x 9 root root 0 Jun 20 06:52 16
dr-xr-xr-x 9 root root 0 Jun 20 06:53 24
(略)
このように数字のディクレクトリが出てくるが、この数字がプロセスIDである。このプロセスIDが何のアプリケーションと対応しているかというと、数字のディレクトリの中にある cmdline というファイルを見れば良い。
今回のケースでは数が少なかったので問題ないが、プロセスがたくさんある場合は、以下のように一括で表示してくれるコマンドを叩くといいと思う。
ls /proc/*/cmdline | egrep [0-9]+ | xargs -I{} sh -c 'echo {}; cat {}; echo'
ちょっと適当に作ったのでノイズがあるが、必要なものは得られるはず。