Мне нужно было заменить сценарий авторизации радиуса (для соединений PPPoE). Это сильно используемый сервис, который работает 24/7, поэтому для тестирования нового скрипта я ввел небольшой код в начале исходного скрипта, чтобы разблокировать новый процесс, который вызвал новый скрипт (без опасности сломать что-то, если новый ошибки сценария). Это внедренный код:Код возврата возврата backtick оператора 5 (или 1280)
$pid = fork();
if($pid == 0)
{
my $now_string = POSIX::strftime "%a %b %e %H:%M:%S %Y", localtime;
open(FILE,">>/new_log_file.log");
`/new_script_path/new_script.pl @ARGV`;
if ($? == 0)
{
print FILE "[".$now_string."] Chiled executed succesfuly\n";
} elsif($? == -1)
{
print FILE "[".$now_string."] FAILED to execute\n";
} elsif($? & 127)
{
printf FILE "[".$now_string."] child died with signal %d, %s coredump\n", ($? & 127), ($? & 128) ? 'with' : 'without';
} else
{
printf FILE "[".$now_string."] child exited with value %d\n", $? >> 8;
}
close(FILE);
exit;
}
К сожалению, это не удалось выполнить новый сценарий и в лог-файлы я имел это сообщение:
"[Mon Feb 27 09:25:10 2012] child exited with value 5"
без смещения битов, значение $? 1280;
Новый скрипт работает, как и ожидалось, если я его вручную назову.
Что означает код состояния 5? Как я могу отлаживать команду в ответной подсказке, чтобы узнать, что происходит?