回答:
少なくともLinuxでは、次のこともできます。
ps -o lstart= -p the-pid
より便利な開始時間を持つため。
ただし、プロセスが開始された時刻であり、必ずしも現在実行中のコマンドが呼び出された時刻ではないことに注意してください。プロセスは、その存続期間中に複数のコマンドを実行できます(そして一般的に実行します)。また、コマンドは他のプロセスを生成する場合があります。
/proc
(少なくとも)Linux上のファイルのmtimes は一般に、それらのファイルがインスタンス化された日付です。これは、何かがそれらにアクセスしようとしたか、ディレクトリの内容をリストしようとした初めてです。
例えば:
$ sh -c 'date +%T.%N; sleep 3; echo /proc/"$$"/xx*; sleep 3; stat -c %y "/proc/$$/cmdline"'
13:39:14.791809617
/proc/31407/xx*
2013-01-22 13:39:17.790278538 +0000
展開する/proc/$$/xx*
と、シェルはその内容を読み取り/proc/$$
、cmdline
ファイルのインスタンスが作成されました。
procは仮想ファイルシステムなので、ファイルステータス情報に依存しません。
プロセスの開始時刻は/ proc / PID / stat列22にあります。システムのブート後にjiffiesで与えられます。秒に変換するにsysconf(_SC_CLK_TCK)
は、ほとんどのシステムで100で割る必要があります(すべてではありません!)。
システムの起動時間を取得するには、/ proc / uptimeの最初の値である現在の稼働時間を秒単位で決定します。
これらの2つの数値を使用して、最初の数値を2番目の数値から減算すると、プログラムを開始してから経過した秒数が得られます。
例(pidginの場合):
PID=$(pidof pidgin)
STARTTIME=$(awk '{print int($22 / 100)}' /proc/$PID/stat)
UPTIME=$(awk '{print int($1)}' /proc/uptime)
NOW=$(date +%s)
DIFF=$((NOW - (UPTIME - STARTTIME)))
date -d @$DIFF
注:pidof
複数のPIDを返す場合、この単純な例は機能しません。