fork()之后创建的子进程的父pid_t

时间:2014-03-12 18:21:06

标签: c unix process pid

我有以下功能:

void test_fork()
{
    pid_t id;

    printf("Parent process id: %d\n", getpid());

    id = fork();

    if (id == 0)
        printf("\nChild:");
    else if (id > 0)
        printf("\nParent:");
    else
        exit(EXIT_FAILURE);

    printf("\nprocess id: %d\n", getpid());
    printf("parent process id: %d\n", getppid());
}

我的疑问与其输出有关,特别是有时我会有以下和直接的输出:

Parent process id: 879

Parent:
process id: 879
parent process id: 878

Child:
process id: 881
parent process id: 879

最后一个id等于其父ID(如预期的那样)。

但有时输出是例如:

Parent process id: 858

Parent:
process id: 858
parent process id: 857

Child:
process id: 860
parent process id: 1

最后一个id不等于其父进程id,但它等于1(应该是init进程的id)。

怎么可能?

2 个答案:

答案 0 :(得分:2)

这是因为父进程已经在子进程请求其父进程的pid时完成,因此子进程的父进程默认为init进程。 init进程的pid1

尝试在父进程中放置wait() !!

答案 1 :(得分:1)

这是因为父进程在子进程运行之前退出,而子进程则是第一个进程的子进程。