gpt4 book ai didi

子进程打印错误的 ppid()

转载 作者:太空狗 更新时间:2023-10-29 12:00:09 27 4
gpt4 key购买 nike

在这个程序中,为什么子进程打印错误的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

如果我重新执行。有时输出是我所期望的,有时是出乎意料的。

最佳答案

找到了原因。那是愚蠢的。 parent 先结束,所以 child (孤儿)被 init 进程收养。

在我的例子中,它是进程 ID 为 1810 的 Upstart。

Upstart is an event-based replacement for the /sbin/init

关于子进程打印错误的 ppid(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39815805/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com