首页 > 解决方案 > fork() 之后进程从哪里开始执行

问题描述

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


int main(void) {
    for (int i = 1; i < 4; i++) {
        printf("%d", i);
        int id = fork();
        if (id == 0) {
            printf("Hello\n");
            exit(0);
        } else {
            exit(0);
        }
    }
    return 0;
}

对于此代码,它会在我的计算机上打印 11Hello。这对我来说似乎违反直觉,因为“1”被打印了两次,但它是在调用 fork() 之前。

标签: cfork

解决方案


fork() 系统调用 fork 一个新进程,并在每个进程中并行执行跟在它后面的指令。在您的子进程将 i 的值打印到标准输出后,它会被缓冲,然后再次打印“i”的值,因为标准输出没有被刷新。

使用fflush(stdout);'i' 每个叉子只打印一次。

或者,您也可以使用printf("%d\n", i);末尾的换行符来完成这项工作。


推荐阅读