繁体   English   中英

子进程打印错误的ppid()

[英]child process prints wrong ppid()

在此程序中,为什么子进程打印错误的ppid()?

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

void childprocess()
{
  printf("Child: Hi I am the child process\n");
  printf("Child: My process id is %d\n", getpid());
  printf("Child: My parent is %d\n", getppid());
  printf("Child: I am exiting\n");
}

void parentprocess()
{
   printf("Parent: Hi I am the parent process\n");
   printf("Parent: My process id is %d\n", getpid());
   printf("Parent: My parent is %d\n", getppid());
   printf("Parent: I am exiting\n");
}

int main()
{
    pid_t n = fork();
    if(n<0)
    {
      perror("fork failed:");
      exit(EXIT_FAILURE);
    }
    else if(n==0)
       childprocess();
    else
       parentprocess();
}

输出:

Parent: Hi I am the parent process
Parent: My process id is 21550
Parent: My parent is 7452
Parent: I am exiting
Child: Hi I am the child process
Child: My process id is 21551
Child: My parent is 1810
Child: I am exiting

如果我重新执行。 有时输出是我期望的,有时则是意外的。

找到原因了,那太愚蠢了。 父级先结束,因此子级(孤儿)被初始化进程采用。

在我的情况下,它是进程号为1810的新贵。

Upstart是/ sbin / init的基于事件的替换

实际上,不能保证调度程序将首先调度子进程。 父进程可能在子进程运行之前终止。 并且由于在Linux中,每个进程都有一个父进程(交换进程除外),因此将孤儿分配给init。

您可以添加一个wait()以便父进程等待子进程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM