C WEXITSTATUS(状态)返回什么?
我试图理解C WEXITSTATUS(状态)返回什么?,c,unix,signals,posix,fork,C,Unix,Signals,Posix,Fork,我试图理解WEXITSTATUS(status)是如何工作的。我遇到了一段代码,WEXITSTATUS(status)的返回值被添加到变量中 以下是片段: waitpid(-1, &status, 0); counter += WEXITSTATUS(status); 如何计算WEXITSTATUS的返回值?WEXITSTATUS(stat\u val)是一个宏(因此实际上它不会“返回”某个对象,而是“计算”某个对象) 关于它的工作原理,您可能希望在您使用的C编译器附带的标题(应该是#
WEXITSTATUS(status)
是如何工作的。我遇到了一段代码,WEXITSTATUS(status)
的返回值被添加到变量中
以下是片段:
waitpid(-1, &status, 0);
counter += WEXITSTATUS(status);
如何计算WEXITSTATUS
的返回值?WEXITSTATUS(stat\u val)
是一个宏(因此实际上它不会“返回”某个对象,而是“计算”某个对象)
关于它的工作原理,您可能希望在您使用的C编译器附带的标题(应该是#include
d via)中查找它
此宏的实现可能因C语言实现的不同而不同
请注意,如果宏WIFEXITED(stat_val)
给您的值不等于0
,则该宏仅给出一个正常值
逐字记录:
WEXITSTATUS(统计值)
如果WIFEXITED(stat_val)的值非零,则此宏将计算子进程传递给或的状态参数的低位8位,或子进程从main()返回的值
添加特定程序的返回代码背后的动机只有代码的作者和现有文档知道。我提到了man waitpid。我无法运行这段代码。我应该如何获得状态参数的低阶8位的值?我怎样才能得到status需要的整数值?@shaveenk:您是“…无法运行…”还是无法编译此代码?您得到了哪些错误?如果所有命令都成功,那么
计数器中的值将为零;如果任何命令以故障(非零)状态退出,计数器中的值将非零。如果您运行了太多的命令,导致出现溢出问题,那么即使几乎所有操作都失败了,您也可能碰巧得到0,但这种可能性很小。注意,如果命令由于信号(WIFSIGNALED)而死亡,那么WEXITSTATUS将为零,但命令仍然失败。对。我理解那部分。我真的很想知道根据接收到的信号,状态值被设置为什么。WIFSIGNALED、WIFSTOPPED等是否将状态设置为整数值?我们如何知道该值是什么?宏计算状态
,其中包含进程的退出代码。如果进程12345调用exit(7)
并且您waitpid(12345,&status,0)
,那么WEXISTATUS(status)
将生成7
。