gpt4 book ai didi

对 fork 调用输出的困惑

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:13 25 4
gpt4 key购买 nike

考虑以下程序的输出:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
void main()
{
pid_t pid;
int a = 5;
pid = fork();
if (pid == 0)
printf("This is the son process, a = %d\n", --a);
else
printf("This is the dad process, a = %d\n", ++a);
}

我期望的输出是:

This is the son process, a = 4;
This is the dad process, a = 6;

但我得到的输出是:

This is the son process, a = 4

那么为什么父进程没有执行 printf 呢?我怎样才能得到我想要的输出?

更新:

刚才我又试了一次,输出是这样的:

$ gcc fork.c -o fork
$ ./fork
This is the dad process, a = 6
$ This is the son process, a = 4

现在还有一个问题:为什么两行输出之间有一个$

我认为预期的输出应该是这样的:

$ gcc fork.c -o fork
$ ./fork
This is the dad process, a = 6
This is the son process, a = 4

我不明白为什么 $ 在那里。

更多详情:

gcc version: gcc 4.8.2  
OS: ubuntu 14.04

最佳答案

您需要检查“fork failed”条件。当 fork() 返回 -1 时,发生错误。这是函数语义的一部分,因此如果省略它,将得到不正确的结果。

查看考虑了 fork 失败可能性的示例 here .

请参阅此 related question 中关于为什么 fork 可能失败的讨论.

关于对 fork 调用输出的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30621774/

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