为什么此退出函数在C的末尾添加两个零?

时间:2018-11-19 21:43:30

标签: c fork exit

嘿,所以我用C语言编写了一个大学课程,孩子应该以0xAA十六进制退出,但最后还要加上两个零?为什么这样做呢?我在监督什么吗?

pid_t cpid;
int status;
cpid = fork();
if (cpid==-1){
    return -1;
}
else if(cpid==0){
    pid_t pid_child = getpid();
    pid_t ppid_child = getppid();
    printf("ChildProcessID from Child: %d\n",pid_child);
    printf("ParentProcessID from Child: %d\n",ppid_child);
    exit(0xAA);
}
else{
    printf("ChildProcessID: %d\n",cpid);
    wait(&status);
    printf("Exit Status Child: %#X\n",status);
}

应在最后输出

Exit Status Child: 0XAA

它发出

Exit Status Child: 0XAA00

对于任何格式错误或忘记的内容,我们深感抱歉。这是我在这里的第一篇文章。 预先感谢。

1 个答案:

答案 0 :(得分:6)

wait返回时,给定参数除了退出代码外还包含其他信息。它还告诉您该过程是否正常终止。

可以使用宏来提取相关部分:

wait(&status);
if (WIFEXITED(status)) {
    printf("Exit Status Child: %#X\n",WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
    printf("Child exited abnormally via signal %d\n", WTERMSIG(status));
} else {
    printf("Something else happened\n");
}