Состояние выхода из программы - PullRequest
2 голосов
/ 03 июня 2011

У меня вопрос о состоянии выхода из программы в Linux. В моей программе я разветвляю дочерний процесс и вызываю waitpid, чтобы пожинать его. Когда waitpid вернется, я хочу проверить состояние выхода моего дочернего процесса. Я обращаюсь к руководству за помощью и обнаруживаю, что второй аргумент waitpid будет содержать состояние выхода, и я могу использовать макрос WEXITSTATE для его чтения. Однако этот макрос просто извлекает 8 младших значащих бит из реального состояния выхода, тогда как в руководстве по функции exit(int ret_val) он будет выходить с ret_val & 0x377 вместо 8 младших значащих бит.

У меня вопрос, где остальные биты? Мы просто бросаем их? Почему Linux использует эту стратегию? Разве эта реализация не создает проблем для нашей программы?

Спасибо и наилучшими пожеланиями.

Ответы [ 3 ]

5 голосов
/ 03 июня 2011

Я думаю, вы обнаружите, что 0x377 действительно или должно было быть 0377.

Это восьмеричное число, поэтому 377 8 равно 8бит.

2 голосов
/ 03 июня 2011

Выходные возвращаемые значения допускаются только в диапазоне от 0 до 255 для спецификации POSIX.Вы не должны возвращать значения выше этого (другими словами, POSIX-совместимая ОС будет касаться только младших восьми битов вашего возвращаемого значения выхода, и это все, что будет передано родительскому процессу).

0 голосов
/ 03 июня 2011

Unix / POSIX поддерживает только 8 бит.10 бит будет нечетным (как в математическом, так и в логическом смысле) значением, поэтому я должен согласиться с @ DigitalRoss.

...