Linuxプロセスの起動時刻を調べる方法
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