LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 838|回复: 3

linux进程的问题(急)

[复制链接]
发表于 2005-4-25 21:19:55 | 显示全部楼层 |阅读模式
正在学进程创建这一块,写了个程序
[php]
#include<stdio.h>
main()
{  int a;
    a=fork();
    printf("%d\n",a);
    a=getpid();
    printf("%d\n",a);
    a=getppid();
    printf("%d\n",a);
}
[/php]
程序很简单,返回结果如下
连续运行5次
第一次
0
2104
21032104
2103
1918
第二次
0
2106
21050106
2105
1918
第三次
2108
2107
1918[root@localhost c]# 0
2108
1
第四次
0
2110
21092110
2109
1918
第五次
0
2112
21112112
2111
1918
其他几次结果还算正常,第3次运行,中间程序结束了一次,又接着运行,哪位高手能帮忙分析一下其中的过程,如果继续运行,还会间歇性的出现第三次的情况,还有,这种递加的分配pid,谁能把其中的具体过程给讲讲,在这里向那些乐于助人的朋友们致以最崇高的敬意
发表于 2005-4-25 22:20:40 | 显示全部楼层
fork之后,父子进程谁先运行取决于操作系统的调度,也就是说:顺序是不确定的。
那就有了上面的不确定的结果,像第三次,是父进程先结束了,然后打印了Shell的提示符,子进程继续运行,然后输出了它其它的信息。而其他的次数是子进程先结束,所以没有打印出shell提示符,也就是你认为的正常的情况。

PS:这可不是shell编程,我帮忙转到程序设计版
回复 支持 反对

使用道具 举报

发表于 2005-4-25 23:12:00 | 显示全部楼层
第三次运行的情况是,父进程先获得运行时间,打印出2108\n2107\n1918\n之后,进程结束于是前台又被shell占用。接着子进程获得CPU时间,打印了0\n2108\n1\n。最后一行子进程打印出1的原理是它的父进程已经退出,它被init进程继承,1就是init进程的进程号。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-4 01:10:23 | 显示全部楼层
发了这个帖子就没办法上sir了,找了个代理才上来,所以费了好大力才找到大家的解答,太感谢了..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表