古い実行中のプロセスの開始時間を取得することは可能ですか?ps
は、それが今日開始されなかった場合は日付(時刻ではなく)を報告し、今年が開始されなかった場合は年のみを報告するようです。古いプロセスでは精度が永久に失われますか?
ps -p <pid> -o lstart=
追加の行(ヘッダー)が印刷されないようにするために使用する方が良いでしょう。
古い実行中のプロセスの開始時間を取得することは可能ですか?ps
は、それが今日開始されなかった場合は日付(時刻ではなく)を報告し、今年が開始されなかった場合は年のみを報告するようです。古いプロセスでは精度が永久に失われますか?
ps -p <pid> -o lstart=
追加の行(ヘッダー)が印刷されないようにするために使用する方が良いでしょう。
回答:
lstart
次のコマンドのように、フォーマッタを指定してを使用できます。
ps -eo pid,lstart,cmd
上記のコマンドは、すべてのプロセスを出力し、PID、コマンド実行、および日付と時刻の開始を取得するフォーマッターを使用します。
例(Debian / Jessieコマンドラインから)
$ ps -eo pid,lstart,cmd
PID CMD STARTED
1 Tue Jun 7 01:29:38 2016 /sbin/init
2 Tue Jun 7 01:29:38 2016 [kthreadd]
3 Tue Jun 7 01:29:38 2016 [ksoftirqd/0]
5 Tue Jun 7 01:29:38 2016 [kworker/0:0H]
7 Tue Jun 7 01:29:38 2016 [rcu_sched]
8 Tue Jun 7 01:29:38 2016 [rcu_bh]
9 Tue Jun 7 01:29:38 2016 [migration/0]
10 Tue Jun 7 01:29:38 2016 [kdevtmpfs]
11 Tue Jun 7 01:29:38 2016 [netns]
277 Tue Jun 7 01:29:38 2016 [writeback]
279 Tue Jun 7 01:29:38 2016 [crypto]
...
他のフォーマッタについては、ps
のマンページを読むか、Opengroupのページを確認してください。
etime
プロセスが開始されてからの経過時間です。
ps axo pid,cmd,lstart
動作します
psコマンド(少なくとも多くのLinuxディストリビューションで使用されるprocpsバージョン)には、プロセスの開始時刻に関連するいくつかのフォーマットフィールドがあり、lstart
これには常に、プロセスが開始した完全な日時が示されます。
# ps -p 1 -wo pid,lstart,cmd
PID STARTED CMD
1 Mon Dec 23 00:31:43 2013 /sbin/init
# ps -p 1 -p $$ -wo user,pid,%cpu,%mem,vsz,rss,tty,stat,lstart,cmd
USER PID %CPU %MEM VSZ RSS TT STAT STARTED CMD
root 1 0.0 0.1 2800 1152 ? Ss Mon Dec 23 00:31:44 2013 /sbin/init
root 5151 0.3 0.1 4732 1980 pts/2 S Sat Mar 8 16:50:47 2014 bash
/ procファイルシステムでの情報の公開方法については、https: //unix.stackexchange.com/questions/7870/how-to-check-how-long-a-process-has-been-runningを参照して ください。
(Linuxでの私の経験では、/ proc /ディレクトリーのタイム・スタンプは、プロセスの開始時刻ではなく、仮想ディレクトリーが最近アクセスされた瞬間に関連しているようです:
# date; ls -ld /proc/1 /proc/$$
Sat Mar 8 17:14:21 EST 2014
dr-xr-xr-x 7 root root 0 2014-03-08 16:50 /proc/1
dr-xr-xr-x 7 root root 0 2014-03-08 16:51 /proc/5151
この場合、16:50頃に「ps -p 1」コマンドを実行してから、新しいbashシェルを起動し、その後すぐにそのシェル内で「ps -p 1 -p $$」コマンドを実行したことに注意してください... 。)
e
(標準ps
構文)またはax
(BSD構文)引数を追加します:ie ps -ewo pid,lstart,cmd
またはps -axwo pid,lstart,cmd
フォローアップとして、アダムMatanの答え、/proc/<pid>
のようなディレクトリのタイムスタンプは、必ずしも直接的に有用ではありませんが、あなたは使用することができます
awk -v RS=')' 'END{print $20}' /proc/12345/stat
システムブート以降の開始時間をクロック刻みで取得します。1
これは少しトリッキーなユニットです。詳細については、jiffiesを秒に変換するもご覧ください。
awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
END { printf "%9.0f\n", now - ($20/ticks) }' /proc/uptime RS=')' /proc/12345/stat
これにより、秒数が得られます。これを渡してstrftime()
、(人間が読み取れる、またはその他の方法で)タイムスタンプを取得できます。
awk -v ticks="$(getconf CLK_TCK)" 'NR==1 { now=$1; next }
END { print strftime("%c", systime() - (now-($20/ticks))) }' /proc/uptime RS=')' /proc/12345/stat
コメントのStephane Chazelasによるいくつかの修正で更新されました。いつもありがとう!
Mawkしかない場合は、
awk -v ticks="$(getconf CLK_TCK)" -v epoch="$(date +%s)" '
NR==1 { now=$1; next }
END { printf "%9.0f\n", epoch - (now-($20/ticks)) }' /proc/uptime RS=')' /proc/12345/stat |
xargs -i date -d @{}
1 人proc ; starttimeを検索します。
strftime()
とsystime()
はに存在しないことを覚えておいてくださいmawk
。これは、awk
私のDebian 8 VPSイメージのデフォルトなので、それらがgawk
の方言に固有であるとしか想定できません。
ls -ltrh /proc | grep YOUR-PID-HERE
たとえば、Google ChromeのPIDは11583です。
ls -l /proc | grep 11583
dr-xr-xr-x 7 adam adam 0 2011-04-20 16:34 11583
ps
と言うinvalid option
他の回答で述べたすべてのオプションを。
grep
?なんでls -ldh /proc/$pid
?またはさらに良いdate -r /proc/$pid
ですか?
ps -eo pid,etime,cmd|sort -n -k2
ps -p <pid> -o lstart
ますか?うまくいくようですが、この質問が何度も出てくるように思われるのに、なぜそれがすぐに明白な答えにならないのかはわかりません。