use POSIX qw( WEXITSTATUS WIFEXITED );
if( WIFEXITED($?) ) {
print "The exit status was ", WEXITSTATUS($?), "\n";
}
См. Также WIFSIGNALED
и WTERMSIG
.
Другим полезным макросом C является WCOREDUMP
, задокументированов библиотеке GNU C as (с дополнительным выделением)
WCOREDUMP(status)
возвращает значение true, если дочерний объект создал дамп ядра.Этот макрос должен использоваться только если WIFSIGNALED вернул true. Этот макрос не указан в POSIX.1-2001 и недоступен в некоторых реализациях Unix (например, AIX, SunOS).Используйте только это, заключенное в #ifdef WCOREDUMP
… #endif
.
Поскольку версия 5.10.0 , perl включает WCOREDUMP
в своем вычислениизначение $?
, если макрос доступен в вашей системе, как описано в perlvar :
Таким образом, значение выхода подпроцесса действительно ($?>> 8)
, и $? & 127
выдает сигнал, если таковой имеется, от которого умер процесс, а $? & 128
сообщает, был ли дамп ядра.