Вилка не показывает ребенка пид на мать - PullRequest
0 голосов
/ 03 января 2019

Я только начал работать с Fork и сделал это, чтобы понять, как это действительно работает, обычно на материнской стороне, когда я печатаю переменную a я должен получить идентификатор дочернего процесса, но он дает мне ноль

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

void main(){

    int a;
    a=fork();
    if(a==0){
        printf("Child Process, pid= %d, mother id: %d", getpid(), getppid());
        exit(0);
    }else{
        wait(&a);
        printf("Mother Process, Child pid= %d, mother's pid= %d ", a, getpid());    

    }

}

1 Ответ

0 голосов
/ 03 января 2019

Вы используете wait неправильно. Это определяется следующим образом:

pid_t wait(int *stat_loc)

поэтому, когда вы называете это как

wait(&a);

вы игнорируете возвращаемое значение, которое будет PID ребенка, и заменяете то, что было дочерним PID, который fork возвратил, состоянием возврата, возвращенным дочерним элементом.

Если вы поместите оператор printf перед ожиданием, вы увидите, что a уже содержит PID ребенка. И правильный вызов wait с последующим повторением вывода должен дать те же результаты ... хотя в приведенном ниже примере я также включил результат статуса.

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

void main(){

    int a;
    a=fork();
    if(a==0){
        printf("Child Process, pid= %d, mother id: %d\n", getpid(), getppid());
        exit(0);
    }else{
        int status;
        printf("Mother Process, Child pid= %d, mother's pid= %d\n", a, getpid());    
        a=wait(&status);
        printf("Mother Process, Child pid= %d, mother's pid= %d, status = %d\n", a, getpid(), status);    

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...