2015-11-05 3 views
0

Как я могу получить время выполнения, если я его остановил? Пример. Я запустил свой скрипт perl, и я нажимаю клавишу CTRL + C или CTRL + Z, чтобы остановить ее, затем опубликуйте время выполнения. Это возможно или нет?Как получить время выполнения программы Perl?

ответ

4

В Linux вы можете использовать program time для получения времени выполнения. Просто добавьте его в свой скрипт на Perl.

$ cat foo.pl 
1 while 1; 
$ time perl foo.pl 
^C 
real 0m1.006s 
user 0m0.756s 
sys 0m0.008s 

Конечно, это не ограничивается программами Perl. Он работает для любой программы.

+0

Спасибо, это работает. –

1

Perl имеет встроенную переменную, называемую: $^T, которая является временем начала программы.

Примечание - на Unix CTRL-Zостанавливает процесс (SIGSTP) (который может быть продолжен), где CTRL-C заставляет его выхода. (SIGINT)

Добавление обработчика для SIGINT будет примерно таким.

$SIG{'INT'} = sub { warn "Start time: $^T\n, Run time:".(time() - $^T)."\n" }; 

Примечание - это фактически не будет бомбить вашу программу больше - если вы делаете это, вы, вероятно, следует die, а также, в противном случае программа будет делать что-то неожиданное (например, не выход на Ctrl-C - но это нормально, если это прерывание «текущая операция»)

Так обычно вы бы подключить один из других сигналов на , как SIGUSR1 или SIGUSR2 которые явно для определенного пользователя функций. (Вы можете затем kill -USR1 <pid>)

#!/usr/bin/env perl 
use strict; 
use warnings; 

$SIG{'INT'} = sub { warn "Started at $^T, runtime ".(time() - $^T)."\n"; die }; 
$SIG{'USR1'} = sub { warn "Started at $^T, runtime ".(time() - $^T)."\n"; 
        warn "Program continuing\n"; }; 

while (1) { 
    sleep 1; 
} 
+0

Nit: Ctrl-Z (в unix) отправляет 'SIGTSTP', поэтому вы можете заманить его в ловушку, если хотите. Не очень полезно здесь. Я думаю, он может быть в Windows, где Ctrl-Z приводит к EOF (аналогично Ctrl-D в unix). – ikegami

+0

Отредактировано, хорошо. Привязка «нормальных» сигналов - это плохо. – Sobrique

+0

Не работает, какая ошибка вы получаете? (обратите внимание, немного подстроил его ...) – Sobrique

Смежные вопросы