gpt4 book ai didi

linux - 多次 fork() 调用后程序被拆分

转载 作者:行者123 更新时间:2023-12-04 19:27:29 26 4
gpt4 key购买 nike

我无法弄清楚为什么以下代码不会产生我期望的结果:

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

int main(int argc, char** argv) {

int n1 = fork();

if (n1 == 0) {
int n2 = fork();
int n3 = fork();
int n4 = fork();
} else if (n1 > 0) {
int n5 = fork();
}

printf("%d with parent %d\n", getpid(), getppid());
}
我希望这可以一次打印所有内容。但是,它会打印第一个进程,然后在程序的新运行中打印其余的进程。它还输出错误的父 PID,并且不会终止。
enter image description here

最佳答案

这不是该程序的新运行。
原始父进程不会等待子进程退出。它用 int n1 = fork(); fork 一个 child 和 int n5 = fork(); 的第二个 child .然后它打印它的消息并退出。
shell 只等待原来的父进程,它对子进程一无所知。退出时,将打印提示。
同时,子进程仍在运行。他们在 shell 提示符后打印他们的消息。其中一些也可以先打印——它们的运行顺序是不可预测的。
PID 没有错。当父进程在子进程之前退出时,子进程由systemd 继承,所以它的父进程ID发生了变化。在您的情况下,这是 PID 1256。

关于linux - 多次 fork() 调用后程序被拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69730045/

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