Как определить дату и время запуска процесса Linux? - PullRequest
1 голос
/ 10 июля 2011

Если я посмотрю на / proc / 6945 / stat, то получу серию чисел, одним из которых будет количество процессорных сантисекунд, для которых запущен процесс.

Но я запускаю эти процессы на сильно загруженных ящиках, и меня интересует время, когда задание будет завершено, для которого я хочу знать время, когда оно началось.

Временные метки для файлов в / proc / 6945 выглядят в нужном диапазоне, но я не могу найти конкретный файл, в котором постоянно указано правильное время.

Как всегда, я не могу изменить процесс.

Ответы [ 3 ]

2 голосов
/ 11 июля 2011

Временные метки каталогов в / 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.

1 голос
/ 12 июля 2011

У меня есть проект на GitHub, который делает это в Perl. Вы можете найти его здесь:

https://github.com/cormander/psj

Код, который вы хотите, находится в lib/Proc/PID.pm, а вот фрагмент (без комментариев):

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 здесь, но это должно быть довольно просто.

1 голос
/ 10 июля 2011

Используйте метку времени создания каталога / proc / 6945 (или любого другого PID) вместо просмотра файлов, которые в нем содержатся. Например:

ls -ld /proc/6945
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...