Вы используете 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);
}
}