gpt4 book ai didi

使用 fork 创建多个进程

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:44 27 4
gpt4 key购买 nike

在与我的 friend 进行了激烈的讨论之后,我们决定询问我们的直觉是否在正确的道路上。问题出在 fork() 函数或子进程上。这是代码:

int main()
{
int status;
if(!fork()) execl("pp1",NULL);
if(!fork()) execl("pp2",NULL);
if(!fork()) execl("pp3",NULL);
wait(&status);
return status;
}

作者解释说这个程序只会创建3个子进程,但是当遇到第一个子进程时,它会进入第一个“if”,将pp1作为一个新进程执行,但与子进程具有相同的pid,没关系。问题在于第二个和第三个 child ,它将如何运行这段代码。我们的直觉是,我们不会到达第二个和第三个“如果”。程序 pp1 将由所有 3 个子进程运行 3 次。

你怎么看?结果会怎样?

最佳答案

注意 fork() 的返回值。来自 man 2 fork:

On success, the PID of the child process is returned in the parent, and 0 is returned in the child. On failure, -1 is returned in the parent, no child process is created, and errno is set appropri‐ ately.

意味着子进程在成功 fork 后收到 0。当 !0 的计算结果为 true 时,子进程执行 execl,而父进程继续执行下一个 fork().

关于使用 fork 创建多个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959460/

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