为什么子进程认为父进程id是1?

mak*_*123 3 c posix fork child-process

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main ( void ) {
    int pid, fpid, ppid;

    fpid = fork();

    printf ("fpid is is %d\n", fpid);
    sleep(5);

    if (fpid > 0) {
        pid = getpid();
        ppid = getppid();
        printf ("\nThis is Parent. My pid %d. My parent's pid %d\n", pid, ppid);
    } else if (fpid == 0) {
        sleep(1);
        pid = getpid();
        ppid = getppid();
        printf ("\nThis is Child. My pid %d. My parent'a pid %d\n", pid, ppid);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为当父进程 ID 为 1 时,意味着父进程已终止,因此子进程的父进程将重新设置为 1(init,第一个进程)。父进程有什么原因会被终止吗?

P.P*_*.P. 5

父进程不等待(通过wait(2))子进程完成。因此,如果父进程在子进程之前退出(它成为孤儿进程),则子进程将被重新设置父进程(采用)为进程 ID 通常为 1 的init进程。因此,子进程称其父进程 ID 为 1。

请注意,在所有系统上,init 进程的 ID 不一定都是 1。POSIX 不强制执行任何此类操作。