Из Как я могу указать лимит времени ожидания для системного вызова Perl?
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # propagate unexpected errors
# timed out
}
else {
# didn't
}
Если происходит тайм-аут, должен ли sub { die "alarm\n" };
завершить процесс. Наверное, я не могу понять die
. Этот http://www.cs.cf.ac.uk/Dave/PERL/node111.html говорит, что «функция die() используется для выхода из вашего скрипта и отображения сообщения для чтения пользователем». Однако в случае с приведенным выше сценарием сценарий будет обрабатывать код с #тайм-аутом. Также sysread продолжает работать. Вместо sysread у меня был perl-скрипт, который спал 30 секунд. Мой тайм-аут был установлен на 10 секунд. Как и ожидалось, код в #timed out выполняется, но скрипт продолжает спать. Любые входные данные приветствуются.