Код состояния выхода 4479 - PullRequest
0 голосов
/ 14 марта 2011

Кто-нибудь знает, что означает код состояния выхода 4479 (0x117f) в системе Ubuntu Linux?Я получаю это без моей программы, кодирующей его (у меня есть только EXIT_SUCCESS и EXIT_FAILURE, которые равны 0 и 1 соответственно), и я не могу найти список таких кодов выше 255. Спасибо!

Ответы [ 2 ]

5 голосов
/ 14 марта 2011

Это 4479 или 0x117f выглядит как то, что вы бы увидели возвращенным из вызова C / C ++ system() (в отличие от значения предопределенной переменной Unix $?,который может быть только 0-255).И учитывая, что вы работаете в Linux, вы, скорее всего, используете glibc .

Так что в этом случае это значение не равно 0-255 exit()., но вместо этого он отформатирован как статус, установленный waitpid() (который может содержать статус выхода, но, вероятно, не в этом случае).

Если это так, то источник говорит мне, что WIFSTOPPED(4479) вернет true, а WSTOPSIG(4479) вернет 17. (Для получения дополнительной информации см. справочную страницу waitpid().) Итак, процесс, для которого 4479возвращается, не завершился и все еще существует, но был остановлен сигналом 17.

Сигнал 17 - SIGCHLD (по крайней мере, если вы работаете в Linux на x86), что означает "Дочерний [процесс] остановлен или завершен ".

Не зная больше о вашем конкретном контексте приложения, я понятия не имею, почему возникает такой SIGCHLD.

2 голосов
/ 14 марта 2011

Похоже, что это значение status , полученное из wait() или waitpid(), которое не совпадает со статусом выхода. Макросы WIFEXITED(), WIFSIGNALED(), WIFSTOPPED() и WIFCONTINUED() должны использоваться для значения status для определения его значения. В этом случае похоже, что WIFSTOPPED() будет истинно для этого значения status , что означает, что дочерний процесс был остановлен.

...