c - 为什么 "X"可以是输出的最后一个字符?

标签 c fork pid

#include <stdio.h>
#include <sys/types.h> 
#include <sys/wait.h> 
#include <sys/types.h>
#include <unistd.h>

int main() {
    if (fork() == fork()){

        fprintf(stderr, "Z");
    }
    else {
        if (waitpid((pid_t)-1,NULL,0)!=-1) {
            fprintf(stderr, "Y");

        }
        else {
            fprintf(stderr, "X");
        }
    }
}

我正在研究这个程序,我发现可以输出“ZYYX”。我不太明白为什么。在我的理解中,一共有四个过程,parent->parent,parent->child,child->parent,child->parent。毫无疑问,child->child 打印 Z。child->parent 在 child->child 打印 Z 之后打印 Y。parent->parent 应该等到 parent->child 打印 X。那么为什么 X 可能是打印为输出的最后一个字符?

最佳答案

我意识到 waitpid 等待任何子进程,所以如果 ZY 已经打印出来,那么 Y 可以立即打印出来,因为它已经等待了“Y”。因此,X 可以打印为最后一个字符。

关于c - 为什么 "X"可以是输出的最后一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47849574/

相关文章:

c - C中的链表——搜索方法

c - 为什么 getppid 返回相同的值,即使对于孙进程也是如此?

MySQL 未在 Linux 机器上运行

c++ - C/C++混合编程 : gdb segmentation fault frequently

c - 如何在 C 中正确释放 char*** 内存,这样我就不会发生内存泄漏

c++ - 使用预处理器指令从数学方程式生成错误值

子进程不会因kill(pid_t, SIGTERM)而死亡

github - 如何跟踪我的 fork 解决的所有上游问题

linux - 如何在 bash 中找到正在运行的命令的 PID?

python - 如何使用自定义环境变量通过 subprocess.Popen 获取 PID?