Запрос относительно значения состояния выхода дочернего процесса, созданного с помощью fork () - PullRequest
0 голосов
/ 28 мая 2019

Просто запросите информацию о статусе дочерних процессов, созданных с помощью 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 Ответ

2 голосов
/ 28 мая 2019

С man waitpid :

Если wstatus не равен NULL, wait () и waitpid () сохраняют информацию о состоянии в int, на который он указывает.Это целое число можно проверить с помощью следующих макросов (которые принимают целое число в качестве аргумента, а не указатель на него, как это делается в wait () и waitpid ()!):

WEXITSTATUS (stat_val)

Если значение WIFEXITED (stat_val) не равно нулю, этот макрос оценивается как младшие 8 битов аргумента состояния, которые дочерний процесс передал в _exit () или exit (), или значениедочерний процесс вернулся из main ().

Итак, вы должны:

printf("The status of child is %u\n", WEXITSTATUS(status));
...