2011-03-14 169 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