2011-06-03 184 views
2

我有一個關於Linux中程序退出狀態的問題。在我的程序中,我分叉了一個子進程並調用waitpid來獲得它。當waitpid返回時,我想檢查我的子進程的退出狀態。我轉向手動尋求幫助,發現waitpid的第二個參數將保持退出狀態,我可以使用宏WEXITSTATE來讀取它。然而,這個宏只是提取真正退出狀態的最低有效8位,而在函數exit(int ret_val)的手冊中,它將以ret_val & 0x377而不是最低有效8位退出。程序退出狀態

我的問題是,其他更多的位在哪裏?我們是否簡單地放棄它們?爲什麼Linux採用這種策略?這個實現不會給我們的程序帶來麻煩嗎?

感謝和最好的問候。

回答

5

我認爲你會發現0x377確實或應該是0377

這是八進制,所以   爲8位。

+0

我錯誤0377爲十六進制。 :-) 謝謝。 – 2011-06-04 13:19:05

2

退出返回值僅適用於每個POSIX規範0到255之間。你不應該返回比這更高的值(換句話說,符合POSIX標準的操作系統只會關注退出返回值的低8位,而這些都將傳遞給父進程)。

+0

當然,狀態的其他位包含進程是否轉儲核心以及信號是否將其關閉(如果沒有正常退出)。 – Nemo 2011-06-03 20:58:56

0

Unix/POSIX只支持8位。 10位將是一個奇數(在數學和邏輯意義上)值,所以我不得不同意@DigitalRoss。