C语言 叉子没有在母亲身上显示孩子 pid



我刚刚开始使用 Fork 并这样做是为了了解它的实际工作原理,通常在母端,当我打印变量时a我应该得到子进程 ID,但它给了我零

#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());    
    }
}

您错误地使用了wait。它的定义如下:

pid_t wait(int *stat_loc)

所以当你像

wait(&a);

您将忽略返回值,该值将是子项的 PID,并将fork返回的子 PID 替换为子项返回的退出状态。

如果你把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: %dn", getpid(), getppid());
        exit(0);
    }else{
        int status;
        printf("Mother Process, Child pid= %d, mother's pid= %dn", a, getpid());    
        a=wait(&status);
        printf("Mother Process, Child pid= %d, mother's pid= %d, status = %dn", a, getpid(), status);    
    }
}

最新更新