分叉的子项以-1退出,但WEXITSTATUS获得255

我在孩子中以-1退出,但是父母选择了255。 有没有办法让父母识别-1而不是? 这是我的代码

pid = fork(); // if fork fails if (pid < 0){ exit(EXIT_FAILURE); } else if (pid == 0){ // purposely exit _exit(-1); } else{ int status; int corpse = wait(&status); if (WIFEXITED(status)) { int estat = WEXITSTATUS(status); if (estat == 0){ printf("Command was successfully executed\n"); } else{ printf("Error: child exited with status %d\n", estat); } } else printf("signalled\n", corpse); 

wait

WEXITSTATUS(status)

返回子项的退出状态。 这包括子项在exit(3)或_exit(2)的调用中指定的status参数的最低有效8位,或者作为main()中return语句的参数。 仅当WIFEXITED返回true时才应使用此宏。

-1的最低有效8位是0xFF255 )。

从函数wait返回的状态不仅包含子进程的退出代码的信息,还包含终止原因等等。因此, 不可能得到子进程的确切退出代码,并且只有至少8个表示退出代码的子代的位。

wait()后状态为0xFF00。