Как ждать определенный период времени в Perl на Linux - PullRequest
25 голосов
/ 06 июля 2010

Я хочу, чтобы скрипт Perl проверял определенный PID каждые пару минут, а затем завершал процесс. Как мне подождать эти пару минут? Спасибо.

Ответы [ 5 ]

30 голосов
/ 06 июля 2010

sleep (n); где n - количество секунд, в течение которого вы хотите спать.

11 голосов
/ 06 июля 2010

Crontab


Если вы хотите, чтобы Perl-программа выполнялась в установленное время или интервал времени, то вы можете рассмотреть crontab или другой планировщик.

Perl


Если вы хотите выполнить ожидание из скрипта Perl, у вас есть несколько легко развертываемых опций.

Системные вызовы

  1. sleep($n) системный вызов, где $ n - это числовое значение в секундах
  2. usleep($n) системный вызов, где $ n - это числовое значение для микросекунд

Модули Perl

Time :: HiRes предоставляет ряд функций, некоторые из которых переопределяют системные вызовы. Некоторые функции включают в себя: sleep(), usleep(), nanosleep(), alarm(), ualarm()

В отличие от системного вызова usleep(), тот, который упакован с Time :: HiRes , позволяет спать более секунды.

use Time::HiRes qw( usleep ualarm gettimeofday tv_interval nanosleep
                    clock_gettime clock_getres clock_nanosleep clock
                    stat );

Предложение

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

9 голосов
/ 06 июля 2010

Использование sleep():

sleep(120);  # sleep for 120 seconds 

Для задержек с более тонкой гранулярностью, чем одна секунда , вы можете использовать usleep из модуля Time::HiRes. Вы также можете использовать Perl-версию с четырьмя аргументами select(), оставив первые три аргумента неопределенными:

select(undef, undef, undef, 0.25);  # sleep for 250 milliseconds
4 голосов
/ 06 июля 2010

Вы ищете sleep($numSeconds);

Итак, чтобы подождать 2 минуты, вы должны выполнить sleep(120);

perldoc -f sleep

1 голос
/ 06 июля 2010

или вы можете попробовать usleep(microseconds), если целая секунда слишком длинная.sleep(0) просто уступает ОС (без учета времени, оставленного вашим процессом в планировщике).Обратите внимание, что все эти функции вы запрашиваете минимальное количество времени, которое вы хотите спать.В сильно загруженной системе время может быть немного больше.

sleep и usleep являются функциями C, хотя Perl, python и т. Д. Имеют функции, которые вызывают подчиненные C. Справочная страница usleep, версия BSD (другие доступны, попробуйте Google)

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