- 论坛徽章:
- 0
|
本帖最后由 xiabeizi 于 2010-12-27 14:08 编辑
- #include <stdio.h>
- #include <sched.h>
- int data = 10;
- int child_process()
- {
- printf("Child process %d, data %d\n",getpid(),data);
- data = 20;
- printf("Child process %d, data %d\n",getpid(),data);
- while(1);//没起作用,为何?
- }
- int main(int argc, char* argv[])
- {
- if(fork()==0) {
- child_process();
- }
- else{
- sleep(1);
- printf("Parent process %d, data %d\n",getpid(), data);
- while(1);//起作用了,为何?
- }
- }
复制代码 大家请看上面的代码,我理解的是应该是fork之后,是父进程继续执行啊,休息一秒后输出“Parent process …………”
可是实际输出结果是子进程先运行,输出:- Child process 5209, data 10
- Child process 5209, data 20
- Parent process 5208, data 10
复制代码 可是又有一疑问,如果是子进程先执行的话为何child_process()中while(1)没起作用呢?
按我的知识基础,如果想让子进程先执行的话应该是用vfork啊,并且是在对子进程进行exit之后你进程才运行的。
难道是sleep的问题么?sleep是把当前进程挂起,把处理器让给其它进程,可是我把sleep(1)注释掉后,发现跟上面的运行结果一样啊?
怎么回事呢? |
|