如何确定Linux进程启动的date和时间?

如果我查看/ proc / 6945 / stat,则会得到一系列数字,其中一个是进程已经运行的CPU-centisecond数。

但是我正在重负载的机器上运行这些进程,我感兴趣的是工作完成时的时钟,为此我想知道它开始的时钟时间。

/ proc / 6945中的文件的时间戳看起来是在正确的范围,但我找不到一个具有正确时钟的特定文件。

一如既往,我无法修改这个过程。

我在github上有一个项目,它在Perl中是这样做的。 你可以在这里找到它:

https://github.com/cormander/psj

你想要的代码是在lib/Proc/PID.pm ,这里是snippit(删除了注释):

 use POSIX qw(ceil sysconf _SC_CLK_TCK); sub _start_time { my $pid = shift->pid; my $tickspersec = sysconf(_SC_CLK_TCK); my ($secs_since_boot) = split /\./, file_read("/proc/uptime"); $secs_since_boot *= $tickspersec; my $start_time = (split / /, file_read("/proc/$pid/stat"))[21]; return ceil(time() - (($secs_since_boot - $start_time) / $tickspersec)); } 

注意这里的非标准代码函数file_read ,但这应该是非常简单的。

/ proc目录的时间戳是没有用的。

我被建议看看“man proc”; 这就是说,/ proc / $ PID / stat字段21记录自从启动以来在内核jiffies中进程的开始时间…所以:

 open A,"< /proc/stat"; while (<A>) { if (/^btime ([0-9]*)/) { $btime = $1 } } 

以获得开机时间

 my @statl = split " ",`cat /proc/$i/stat`; $starttime_jiffies = $statl[21]; $starttime_ut = $btime + $starttime_jiffies / $jiffies_per_second; $cputime = time-$starttime_ut 

但是我将$ jiffies_per_second设置为100,因为我不知道如何向perl请求内核的值。

使用/ proc / 6945目录(或任何PID)的创建时间戳,而不是查看它包含的文件。 例如:

 ls -ld /proc/6945