当前位置: 技术问答>linux和unix
有关fork()调用的初级问题,急急急!!!高分求助。
来源: 互联网 发布时间:2015-12-30
本文导语: 我们知道使用fork()可以这样, if(fork()==0) { child..... } else { parent.... } 我写了这样一个简单的程序来验证内核调度的随机性, #include #include #include Main() {pid_t val; int data = 10; if (val = = 0) {data...
我们知道使用fork()可以这样,
if(fork()==0)
{
child.....
}
else
{
parent....
}
我写了这样一个简单的程序来验证内核调度的随机性,
#include
#include
#include
Main()
{pid_t val;
int data = 10;
if (val = = 0)
{data --;
printf(“child’s data is : %d n”, data);
exit(0);}
else
{printf(“parent ‘s data is : %d n”, data);}
}
但是2次运行结果是这样:
[root@local host root]#./a.out
parent's data is 10!
[root@local host root]#child's data is 9!
./a.out
child's data is 9!
parent's data is 10!
[root@local host root]#
也就是说当子进程后调度的时候就不会出现前面的[root@local host root]#,
而父进程后调度的时候就有[root@local host root]#,
请问为什么会这样?
谢谢了,急需结果,请帮忙,高分赠送!
if(fork()==0)
{
child.....
}
else
{
parent....
}
我写了这样一个简单的程序来验证内核调度的随机性,
#include
#include
#include
Main()
{pid_t val;
int data = 10;
if (val = = 0)
{data --;
printf(“child’s data is : %d n”, data);
exit(0);}
else
{printf(“parent ‘s data is : %d n”, data);}
}
但是2次运行结果是这样:
[root@local host root]#./a.out
parent's data is 10!
[root@local host root]#child's data is 9!
./a.out
child's data is 9!
parent's data is 10!
[root@local host root]#
也就是说当子进程后调度的时候就不会出现前面的[root@local host root]#,
而父进程后调度的时候就有[root@local host root]#,
请问为什么会这样?
谢谢了,急需结果,请帮忙,高分赠送!
|
parent的父进程是当前的shell,如果parent不是在BACKGROUND运行的,shell会等待parent退出。
parnet退出后,shell就输出[root@local host root]#。
child的父进程是parent,不是当前的shell,所以不会和parent退出时有同样的表现。
其中的关系值得好好研究一下,不是十分简单的。
parnet退出后,shell就输出[root@local host root]#。
child的父进程是parent,不是当前的shell,所以不会和parent退出时有同样的表现。
其中的关系值得好好研究一下,不是十分简单的。
|
楼主的似乎结论不成立
int main()
{
pid_t pid;
pid = fork();
if(pid==0)
{
sleep(1);
printf("childn");
}
else
{
sleep(1);
printf("parentn");
}
}
加sleep是增加子进程得到调度的机会
int main()
{
pid_t pid;
pid = fork();
if(pid==0)
{
sleep(1);
printf("childn");
}
else
{
sleep(1);
printf("parentn");
}
}
加sleep是增加子进程得到调度的机会
|
这个。。。。。。。
有点难
有没有[root@local host root]#和程序没有关系。
和缓冲也没有关系
有点难
有没有[root@local host root]#和程序没有关系。
和缓冲也没有关系