c - 等待无法同步三个进程

标签 c unix ipc wait

我是一名新的 C 开发人员。我正在尝试同步三个进程以使用此代码打印 [FATHER][SON][GRANDSON][FATHER][SON][GRANDSON]:

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

    int c = 0;
    while (c<2)
    {
        c++;
        printf("[FATHER]");
        pid_t son = fork();
        if (son == 0)
        {
            printf("[SON]");
            pid_t grandson = fork();
            if (grandson == 0)
            {
                printf("[GRANDSON]");
                return 0;
            }
            wait(NULL);
            return 0;
        }
        wait(NULL);
    };

  }

相反,我得到这个输出:[父亲][儿子][孙子][父亲][儿子][父亲][父亲][儿子][孙子][父亲][父亲][儿子][父亲][父亲]

我在使用等待代码时是否误解或遗漏了什么?非常非常感谢。

最佳答案

与其在每次调用 printf 之后调用 fflush,不如使用 write 系统调用打印到 stdout(如有必要,首先使用 sprintf 格式化输出字符串)。 write 系统调用进行无缓冲写入,这样您就不必每次都记住调用 fflush

您甚至可以使用可变参数宏来避免总是编写 sprintf 行后跟 write 行。

关于c - 等待无法同步三个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7382398/

相关文章:

使用 fork() 创建具有指定数量子进程的多进程

bash - 提取两个模式之间的线并包括第一个上方和第二个下方的线

c++ - 在 unix 中多次并行运行一个 C++ 二进制文件是否存在问题?

perl - 如何在 perl 中的 fork 之间共享简单标量(计数器变量)?

c++ - 如何在C++中使用管道构建聊天程序

c - 在结构中混合位域

在运行时编译常量

c - 在 C 中打印时得到 ╠

CTRL+C 没有杀死我的程序

c# - 进程间通信