プロセスの起動時間は /proc/[pid]/statの22番目の要素である starttime から取得することができる
$ awk '{print $22}' /proc/27947/stat
4787662015
この値は、OSがブートしてから、タイマーが割り込んだ回数になっている。
秒数を得るには、1秒あたりのクロック数 (getconf CLK_TCKの値)で割る。
$ getconf CLK_TCK
100
OSがブートした時刻は /proc/uptime から取得できる
% awk '{print $1}' /proc/uptime
49951043.92
この値はOSがブートしてからの経過時間(seconds)になっているので、現在時刻から引けば、ブート時刻が得られる。
ブート時刻から、プロセスが起動するまでの秒数を足せば、プロセスが起動した時刻がわかる。
ref. http://d.hatena.ne.jp/hiroppon/20130509/1368061417
ref. https://gist.github.com/hirose31/1668178
ruby 実装
書いた > https://github.com/sonots/get_process_start_time
ruby >= 2.2 なら1秒あたりのクロック数を
require 'etc'
Etc.sysconf(Etc::SC_CLK_TCK)
のように取れるのだが、2.2 未満のバージョンだと取れないようなので、C拡張を書いて対応した。