exec返回255

我有我的代码在Mac上运行,我得到一个来自exec的255返回代码。 以下是代码:

ret = execvp(pArgs[0], pArgs); if (ret < 0) { ret = errno; exit(ret); return false; } else if (processId < 0) { // fork() failed return false; } else if(Wait) { // forked successfuly so wait for exit if(waitpid(processId, &childstatus, 0) == processId) { // codesign command terminted, get return code if(WIFEXITED(childstatus)) { if(pCmdRetStatus != NULL) *pCmdRetStatus = WEXITSTATUS(childstatus); } } } 

任何想法为什么255? 本质上是一个hodiutil调用,很多时候,我得到255。

UNIX(因此Mac OS X)退出状态被强制为0-255无符号的范围。

因此,从调用到execvp的返回值-1将在您的C代码中被处理为-1,但由于exit()函数规则的规则,在操作系统级别将变为255。 考虑下面的例子:

 bash> bash bash2> exit -1 bash> echo $? # The exit status of the last command (bash2) 255 

execvp返回一个错误的整数(-1)(并设置errno,你应该检查/打印(提示: perror ))你传递给exit 。 退出真的只知道EXIT_FAILUREEXIT_SUCCESS ,但它通常只是传递给操作系统的值(通常可以处理0-127 / 0-255,但不要指望它)。

exec唯一可能的返回值是0并且是-1。 我猜的变量ret的类型是错误的( unsigned char而不是int ),因此-1被模转换为256到255。