有关使用fork()创建的子进程的退出状态的值的查询

时间:2019-05-28 06:13:44

标签: c fork waitpid

只需查询有关使用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的新手,所以请原谅,因为这个问题对专家们似乎很愚蠢。

1 个答案:

答案 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));