流程何时开始


Answers:


44

至少在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 // fd中的套接字时间戳记


11

proc是一个虚拟文件系统,因此我不会依赖任何文件状态信息。

该过程的开始时间位于/ proc / PID / stat22中。在系统启动后,它会以jiffies的形式给出。要将其转换为秒,您必须将其除以大多数系统的sysconf(_SC_CLK_TCK)100 (但不是全部!)。

要获取系统启动时间,请确定当前的正常运行时间(以秒为单位),这是/ proc / uptime的第一个值。

有了这两个数字,您就可以从第二个数字中减去第一个数字,并获得自启动程序以来经过的秒数。

示例(对于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返回multipe PID,则此简单示例无效。


关于何时将proc / <pid> / cmdline写入的任何想法?以及任何proc / <pid>条目。
旋转

2
通常,每当您尝试读取这些文件时,它们都是由内核动态生成的,并且其中大多数还具有动态内容。cmdline不会,但是我无法想象有一个正式的政策说明必须在流程启动时创建一次,并且再也不要碰它。
scai

您可以通过执行“getconf CLK_TCK”得到命令行_SC_CLK_TCK值
oᴉɹǝɥɔ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.