正在学习OS课程,尝试了一些系统进程管理的实验,刚开始对进程的并发用实验验证时总是与书本上的结果不同,一般在书上,10几句循环就可以看出进程的并发执行,可是我怎么实验也得不到那样的结果,仔细看看才发现,在书本上的程序中都使用了sleep函数。但是,如果从原理上来讲,不用sleep只要循环执行就应该可以看到进程的循环执行的,最后还是听了老师的意见,加大循环次数,当我将循环次数加到10000时,果然看到预想的结果了。
程序代码如下:
#include <stdio.h>
int main()
...{
int i,pid;
int N=10000;
pid=fork();
if(pid==0)
...{
printf("Child start,PID is %d,PPID is %d ",getpid(),getppid());
for(i=0;i<N;++i)
...{
printf("Child print %d ",i);
}
}else
...{
printf("Parent start,PID is %d,PPID is %d ",getpid(),getppid());
for(i=0;i<N;++i)
...{
printf("Parent print %d ",i);
}
}
printf("Process %d terminated! ",getpid());
return 0;
}
在运行结果中出现如下的片段:
由此结果可以看出,printf函数在输出的任何时候都可能被中止。
此外,在实验时,在Linux和Solaris上都试过,在Linux上,每次都是子进程先,父进程后;而在solaris上却相反是父进程先,子进程后。
本文通过一个简单的C语言程序演示了在Linux和Solaris环境下如何观察进程的并发执行现象,并讨论了循环次数对实验结果的影响。

被折叠的 条评论
为什么被折叠?



