Почему я получаю неожиданный код возврата? - PullRequest
1 голос
/ 21 июня 2010

У меня есть Perl-скрипт со следующим кодом.

...
$kill = 1;
$exit = 0;
`kill -9 $pid >& /dev/null`;
...
print "kill=$kill exit=$exit\n";
if ($kill) {
  exit $exit;
} else {
...

В итоге, этот скрипт использует open3 () для запуска команды. В какой-то момент это убивает задание, и тогда предполагается, что скрипт завершит работу с кодом 0. Я вставил оператор print, чтобы показать значения переменных $kill и $exit, что показано ниже.

kill=1 exit=0

Поскольку $kill равно 1, я ожидаю, что скрипт завершится с кодом 0 выше, поскольку $exit равен 0. Однако скрипт завершается с кодом 9, который является сигналом, отправленным дочернему элементу. Почему сценарий Perl завершается с кодом выхода дочернего элемента, а не с кодом, который передается в вызове exit()?

1 Ответ

0 голосов
/ 21 июня 2010

С здесь :

Функция exit () не всегда завершается немедленно. Сначала он вызывает любые определенные подпрограммы END, но эти подпрограммы END сами по себе не могут прервать выход. Точно так же любые деструкторы объекта, которые должны быть вызваны, вызываются до реального выхода.

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