Edited at

Linuxプロセスの起動時刻を調べる方法

More than 5 years have passed since last update.

※一部誤りがあったので訂正、追記しました。

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