子进程在父进程之后启动

Tai*_*yen 8 c linux fork

我有一个简单的代码来测试fork()函数.

    #include<stdio.h>
    #include<unistd.h>
    #define MAX_COUNT 10
    void main(void)
    {
        pid_t pid;
        int i;
        fork();
        pid = getpid();
        for(i = 1; i <= MAX_COUNT; i++)
        {
            printf("PID = %d, i = %d\n", pid, i);
        }
    }
Run Code Online (Sandbox Code Playgroud)

它没有像我预期的那样工作.

我的期望是:父母的结果和孩子的结果交替出现.有人可以解释这个并教我如何解决它吗?谢谢!

    PID = 3663, i = 1
    PID = 3663, i = 2
    PID = 3663, i = 3
    PID = 3663, i = 4
    PID = 3663, i = 5
    PID = 3663, i = 6
    PID = 3663, i = 7
    PID = 3663, i = 8
    PID = 3663, i = 9
    PID = 3663, i = 10
    PID = 3664, i = 1
    PID = 3664, i = 2
    PID = 3664, i = 3
    PID = 3664, i = 4
    PID = 3664, i = 5
    PID = 3664, i = 6
    PID = 3664, i = 7
    PID = 3664, i = 8
    PID = 3664, i = 9
    PID = 3664, i = 10
Run Code Online (Sandbox Code Playgroud)

Eli*_*nti 11

解释很简单.进程的调度取决于内核.如果这是一个单核处理器,那么在此运行中它决定暂停子执行并允许父进程首先运行.父母在被暂停以支持孩子之前跑了几圈,依此类推.
在多处理器系统中,两个进程可以串联运行,但控制台设备将根据中断的时间交替输出.

无法确保不同的运行会产生相同的输出.也无法保证不同的内核版本不会做其他事情.

如果您希望流程在循环之间交替,那么现在是学习进程间通信的时候.