У меня есть обработчик сигнала INT в моем скрипте Perl.Он не будет выполняться, когда INT отправляется, когда скрипт Perl находится в середине системного вызова.Почему?
Рассмотрим:
$ perl5.12/bin/perl -E "$(cat <<EOF
\$SIG{INT} = sub {say q(trapped INT); exit};
say q(sleeping ...);
system q(sleep 10000); # INT at this point is not caught by Perl.
EOF)"
sleeping ...
Однако, если я заменю системный вызов на спящий вызов, он будет работать как положено:
$ perl5.12/bin/perl -E "$(cat <<EOF
\$SIG{INT} = sub {say q(trapped INT); exit};
say q(sleeping ...);
sleep 10000; # replaces the system call from above
EOF)"
sleeping ...
trapped INT
Версия Perl:
$ perl5.12/bin/perl -v
This is perl 5, version 12, subversion 3 (v5.12.3) built for x86_64-linux-thread-multi
(with 9 registered patches, see perl -V for more detail)
Copyright 1987-2010, Larry Wall
Binary build 1204 [294330] provided by ActiveState http://www.ActiveState.com
Built Feb 9 2011 14:48:47
...