プロセスが起動した日時を知りたい
プロセスの起動日時は ps の START カラムでわかりますが、24時間経過すると表示上時刻がわかりません。
$ ps auxwwwwww | grep -e PID -e redis-server USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND hirose31 775 0.1 0.0 36328 2008 ? Sl Sep26 17:47 /home/hirose31/repos/redis/redis/src/redis-server /usr/oreno/etc/redis/oreno.conf
では、日時(日付+時刻)を知るにはどうしたらよいでしょうか?
ps -o lstart
$ ps axwwwwwwwww -o user,pid,lstart,cmd | grep -e PID -e redis-server USER PID STARTED CMD hirose31 775 Thu Sep 26 18:29:34 2013 /home/hirose31/repos/redis/redis/src/redis-server /usr/oreno/etc/redis/oreno.conf
/proc/PID/stat の starttime (0オリジンで21番目)
#!/usr/bin/env perl use strict; use warnings; use POSIX qw(strftime sysconf _SC_CLK_TCK); my $CLOCK_TICK = sysconf(_SC_CLK_TCK); my $BOOT_TIME = do { my @buf = read_file("/proc/uptime") or die; my($uptime) = split /\s+/, $buf[0]; time() - $uptime; }; for my $pid (@ARGV) { my @buf = read_file("/proc/$pid/stat") or next; my @stat = split /\s+/, $buf[0]; my $starttime_jiffies = $stat[21]; my $starttime_sec = int( $BOOT_TIME + ( $starttime_jiffies / $CLOCK_TICK ) ); my $starttime = strftime "%Y-%m-%d %H:%M:%S", localtime($starttime_sec); my $cmdline = (read_file("/proc/$pid/cmdline"))[0]; $cmdline =~ s/\0/ /g; printf "%5d %s %s\n", $pid, $starttime, $cmdline; } exit; sub read_file { my $file = shift; my @buf; open my $fh, '<', $file or do { warn "Failed to open $file: $!"; return; }; @buf = <$fh>; close $fh; return @buf; }
$ starttime_of 775 775 2013-09-26 18:29:33 /home/hirose31/repos/redis/redis/src/redis-server /usr/oreno/etc/redis/oreno.conf
mtime of /proc/PID ←ダメ
/proc/PID ディレクトリの mtime でもとれると思ったんですがちょっと値が違うみたいですね。識者の解説求む。
$ ls -ld --full-time /proc/775 dr-xr-xr-x 7 hirose31 hirose31 0 2013-09-26 19:50:21.735386357 +0900 /proc/775 $ stat /proc/775 File: `/proc/775' Size: 0 Blocks: 0 IO Block: 1024 directory Device: 3h/3d Inode: 27440728 Links: 7 Access: (0555/dr-xr-xr-x) Uid: ( 2050/hirose31) Gid: ( 2050/hirose31) Access: 2013-09-26 19:50:21.735386357 +0900 Modify: 2013-09-26 19:50:21.735386357 +0900 Change: 2013-09-26 19:50:21.735386357 +0900