如何获得长时间运行的Linux进程的启动时间?
是否有可能获得一个旧的运行过程的开始时间? 似乎ps
会报告date(不是时间),如果不是今天开始的,只有今年没有开始的那一年。 旧的过程是否永远失去了精确性?
您可以指定一个格式化程序并使用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页面 。
ps命令(至less是许多Linux发行版使用的procps版本)有许多与进程开始时间有关的格式字段,包括lstart
,它始终给出进程开始的完整date和时间:
# 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 shell,然后在那个shell中运行“ps -p 1 -p $$”命令。 。)
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 -eo pid,etime,cmd|sort -n -k2
作为Adam 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 { print 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-($10/ticks))) }' /proc/uptime RS=')' /proc/12345/stat
在评论中更新了Stephane Chazelas的一些修正; 一如既往的感谢!
1 人过程 ; search开始时间。
ps -eo pid,cmd,lstart | grep YOUR-PID-HERE