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后调度的规则~应该每次结果都是不一样的啊
迷茫中> <
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
我用的是debian5.0
作者: ling0088 发布时间: 2010-09-09
这子进程和父进程哪个先是随机的吧~~~~有可能是父进程先也有可能是子进程先
作者: 单眼皮大姐 发布时间: 2010-09-09
建议楼主试一万次

作者: starzhestarzhe 发布时间: 2010-09-09
规范没有规定谁先运行谁后运行,也不应该规定。
程序开发的时候,也不应该依赖于谁先谁后。
操作系统内部实现时,考虑到子进程有可能会接着执行一个exec()调用,先执行子程序可以减少共享页面的COW(copy on write),提高性能。
程序开发的时候,也不应该依赖于谁先谁后。
操作系统内部实现时,考虑到子进程有可能会接着执行一个exec()调用,先执行子程序可以减少共享页面的COW(copy on write),提高性能。
作者: drangon 发布时间: 2010-09-09
这个问题我也遇到过,经过测试发现在某一个特定的环境下执行顺序相对固定。
例如在A环境下,顺序可能一直是123
到了B环境下,顺序可能一直是321.
例如在A环境下,顺序可能一直是123
到了B环境下,顺序可能一直是321.
作者: insnowind 发布时间: 2010-09-09
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28