2011-03-14 212 views
0

有沒有人碰巧知道退出狀態代碼4479(0x117f)在Ubuntu Linux系統上的含義?我得到這個沒有我的程序編碼它(我只有EXIT_SUCCESS和EXIT_FAILURE,分別是0和1),我似乎無法找到這樣的代碼列表超過255.謝謝!退出狀態碼4479

+1

更多內容請! – 2011-03-14 04:53:40

回答

5

這4479或0x117f看起來像你會看到從C/C++ system()調用返回(而不是Unix的$?預定義變量的值,可能只有0-255)返回的東西。考慮到你在Linux上,你很可能會使用glibc

所以在這種情況下,該值不是0-255 exit()狀態,而是格式化爲waitpid()(可能包含退出狀態,但在此情況下可能不會)的狀態。

如果是這樣,那麼the source告訴我,WIFSTOPPED(4479)將返回true,而WSTOPSIG(4479)將返回17.(有關詳細信息,請參見waitpid()手冊頁。)因此,對於其返回4479還沒有結束,且過程中仍然存在,但它被信號17停止。

Signal 17 is SIGCHLD(至少如果您在x86上運行Linux),這意味着「子進程停止或終止」。

不知道更多關於您的特定應用程序上下文,我不知道爲什麼發生SIGCHLD。

+0

非常感謝!如果您有時間,請參閱下面的後續內容。 – 2011-03-14 17:08:43

2

看起來這是狀態值從wait() or waitpid()獲得,這與退出狀態不一樣。宏WIFEXITED(),WIFSIGNALED(),WIFSTOPPED(),WIFCONTINUED()應該用於狀態值來確定其含義。在這種情況下,看起來WIFSTOPPED()對於狀態的這個值將爲真,這意味着子進程已停止。

+0

我明白了。感謝你們(Marnix Klooster和mark4o)。這實際上是由一個子進程的waitpid捕獲的值,所以系統用SIGCHLD殺死子進程是有意義的。但是,這就提出了系統爲什麼殺死兒童進程的問題。如果子進程導致分段錯誤,內核是否會發送SIGCHLD而不向stderr發送「分段錯誤」消息?再次感謝。 – 2011-03-14 17:07:56

+0

如果'WIFSTOPPED()'爲true,表明進程已停止(掛起),則不會終止。至於stderr上的消息(例如「Segmentation fault」),它由shell自己的子進程顯示。在這種情況下,這個過程是你的孩子,而不是外殼的孩子,所以如果你想向用戶報告它的狀態是你的責任(你可以使用psignal或psiginfo:http://www.kernel。組織/ DOC /人-頁/在線/頁/ man3/psignal.3.html)。 – mark4o 2011-03-15 03:23:26