我是C的新手。
我尝试了以下代码,期望子代的ppid与父代的pid相匹配,但事实并非如此。

int main() {


    int pid;

    printf("I'm process with pid=%d\n", getpid());

    switch (pid = fork()) {
        case -1:
            perror("fork");
            exit(1);
        case 0:
            printf("I'm the child process: pid=%d, ppid=%d\n", getpid(), getppid());
            break;
        default:
            printf("I'm the parent process: pid=%d, ppid=%d\n", getpid(), getppid());
            break;
    }

    exit(0);

}
> gcc -o fork fork.c
> ./fork
I'm process with pid=16907
I'm the parent process: pid=16907, ppid=6604
I'm the child process: pid=16908, ppid=1 // <-- expected ppid=16907, why 1?
>

我做错了什么 ?

最佳答案

父进程可能已经退出并且不再存在。您可以尝试延迟父项。

关于c fork的子ppid与 parent 的pid不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31237993/

10-09 02:49