Sté*_*las 48
至少在 Linux 上,您还可以执行以下操作:
ps -o lstart= -p the-pid
Run Code Online (Sandbox Code Playgroud)
有一个更有用的开始时间。
但是请注意,它是进程启动的时间,不一定是当前正在执行的命令被调用的时间。进程可以(并且通常会)在其生命周期中运行多个命令。命令有时会产生其他进程。
/procLinux 中文件的 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
Run Code Online (Sandbox Code Playgroud)
扩展/proc/$$/xx*导致 shell 读取/proc/$$导致cmdline文件被实例化的内容。
另请参阅:/proc//fd 中套接字的时间戳
sca*_*cai 12
proc是一个虚拟文件系统,所以我不会依赖任何文件状态信息。
进程的开始时间位于/proc/PID/stat列22。它在系统启动后以 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
Run Code Online (Sandbox Code Playgroud)
注意:如果pidof返回多个 PID,这个简单的例子不起作用。
| 归档时间: |
|
| 查看次数: |
24065 次 |
| 最近记录: |