只需查询有关使用fork()创建的子进程的状态
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
int main (){
int pid;
int status;
printf("Parent: %d\n", getpid());
pid = fork();
if (pid == 0){
printf("Child %d\n", getpid());
sleep(4);
exit(1);
}
waitpid(pid, &status, 0);
printf("The status of child is %u\n",status);
printf("Parent: %d\n", getpid());
return 0;
}
我希望状态显示为1,但它会显示256(添加0的字节)
有人可以解释为什么吗?我是C的新手,所以请原谅,因为这个问题对专家们似乎很愚蠢。
答案 0 :(得分:2)
来自man waitpid:
如果wstatus不为NULL,则wait()和waitpid()存储状态信息 在它所指向的int中。这个整数可以用 以下宏(将整数本身作为参数, 不是指向它的指针,就像在wait()和waitpid()中那样!):
WEXITSTATUS(stat_val)
如果WIFEXITED(stat_val)的值不为零,则此宏求值为子进程传递给_exit()或exit()的状态参数的低8位,或者子进程的值从main()返回。
所以您应该:
printf("The status of child is %u\n", WEXITSTATUS(status));