gpt4 book ai didi

c - fork 的流量,我有多少个 fork ?

转载 作者:行者123 更新时间:2023-11-30 20:22:16 28 4
gpt4 key购买 nike

我已经执行了这段代码。我知道消息的顺序是任意顺序的(因为我明确没有使用信号量)我的程序流程如何?为什么?

父级被执行,因此“baz”被打印一次。有人可以解释为什么不打印“bar”吗?为什么我得到“foo”(if语句为真)两次而不是一三次(不是我想要这个,而是我想理解逻辑)(因为一位同事说我应该得到三次foo它)?

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
int p;
p = fork();
if (fork()==0) {
if (execl("/bin/echo", "/bin/echo", "foo", 0) == -1) {
fork();
}
printf("bar\n");
}
else {
if (p!=0) execl("/bin/echo", "/bin/echo", "baz", 0);
}
}

最佳答案

execl 不返回,它用/bin/echo 替换整个进程镜像。因此,“条”为零。

    if (execl("/bin/echo", "/bin/echo", "foo", 0) == -1) {
fork();
}
/* Not reached if execl succeeded.
Because the exec family of functions replace the process image with
another executable. Flow will never return, unless there is an
error. */
printf("bar\n");

有两个“foo”。

  int p;
p = fork();
/* Two processes now */
if (fork()==0) {
/* Two child processes here. */
execl("/bin/echo", "/bin/echo", "foo", 0); /* (Simplification) */
/* Two (/bin/echo foo) here, flow will never return back */
}

有一个“baz”。

int p;
p = fork();
/* if block removed for simplicity */
if (p != 0)
{
/* Only the initial parent process. */
execl("/bin/echo", "/bin/echo", "baz", 0);
}

关于c - fork 的流量,我有多少个 fork ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40207854/

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