+ -
当前位置:首页 → 问答吧 → fork()函数调用后为什么总是子进程先运行呢

fork()函数调用后为什么总是子进程先运行呢

时间:2010-09-09

来源:互联网

#include <stdio.h>

int main()
{
    int pid;
   
    if (0 == (pid = fork())) {
        puts("child1");
        return 0;
    }
   
    if (0 == (pid = fork())) {
        puts("child2");
        return 0;
    }
   
    puts("parent");
   
    return 0;
}

这样的一段程序编译好以后运行的结果都是
child1
child2
parent
不知道为什么呢
按照我知道的操作系统的进程调度来说~在第一个fork()好了以后child1进程应该排到进程调度队列队尾等待调度
第二个也是一样
parent因为时间片没有用完会继续运行~~所以输出的第一个应该是parent

即使不是这样~posix也没有规定fork后调度的规则~应该每次结果都是不一样的啊

迷茫中> <

作者: ling0088   发布时间: 2010-09-09

P.S.
我用的是debian5.0

作者: ling0088   发布时间: 2010-09-09

这子进程和父进程哪个先是随机的吧~~~~有可能是父进程先也有可能是子进程先

作者: 单眼皮大姐   发布时间: 2010-09-09

建议楼主试一万次  

作者: starzhestarzhe   发布时间: 2010-09-09

规范没有规定谁先运行谁后运行,也不应该规定。
程序开发的时候,也不应该依赖于谁先谁后。

操作系统内部实现时,考虑到子进程有可能会接着执行一个exec()调用,先执行子程序可以减少共享页面的COW(copy on write),提高性能。

作者: drangon   发布时间: 2010-09-09

这个问题我也遇到过,经过测试发现在某一个特定的环境下执行顺序相对固定。
例如在A环境下,顺序可能一直是123
到了B环境下,顺序可能一直是321.

作者: insnowind   发布时间: 2010-09-09

相关阅读 更多

热门下载

更多