正在学习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上却相反是父进程先,子进程后。