Linuxでプロセスがいつ起動したのか知りたい時に使うコマンド

たとえば、ntpdのプロセスが起動した日時を知りたい場合、

ps -eo lstart,pid,args | grep ntpd
Tue Mar 11 15:47:59 2014  667 /usr/sbin/ntpd -u ntp:ntp -x -g

といったように、日時がわかる。

オプション意味
lstartコマンドが実行された日時
pidプロセスID
argsコマンドと引数。cmd, commandと同義

ちなみに/proc/PIDのtimestampから知ることもできる、と思ったのですが、これだと変更される場合があるとのことなので、正しくなかったようです。

正しく知るには、以下のとおりに計算する必要があるとのこと。

まず、/proc/statのbtimeから、Linuxがブートした時刻(Epoch秒)を取得します。

sed -n 's/^btime //p' /proc/stat
1394520435

そしてLinuxがブート後、プロセスが起動するまでにOSのタイマーが割り込んだ回数が/proc//statの22番目(starttime)から参照できます。

awk '{print $22}' /proc/667/stat
4441

これを1秒あたりのクロック数(getconf CLK_TCKの値)で割ると秒数を得られます。

getconf CLK_TCK
100

クロック数は100なので、ブートして44秒後(4441を100で割った値)にプロセスが起動したことなります。

ということで、Linuxがブートした時刻(Epoch秒)とプロセスが起動するまでの秒数を足すと、プロセスが起動した時刻がわかります。

awk 'BEGIN{print strftime("%Y-%m-%d %H:%M:%S", 1394520435+44)}'
2014-03-11 15:47:59