|
发表于 2002-11-12 19:31:33
|
显示全部楼层
对于第二个问题,我试了一下,确实如你所说,出现两遍执行结果。我原来是用gdb调试的,所以只跟踪到一个进程的执行情况。我在程序里加上几句打印语句,问题就清楚了。
我把Randomnum()函数改成如下所示:
void Randomnum(void)
{
int i;
i = random();
i = i%4;
switch(i){
case 0 : p1 = fork(); printf("p1=%d",p1);break;
case 1 : p2 = fork(); printf("p2=%d",p2);break;
case 2 : p3 = fork(); printf("p3=%d",p3);break;
case 3 : p4 = fork(); printf("p4=%d",p4);break;
default: printf("fork fault\n"); break;
}
}
编译执行,结果如下:
p4=1890ABCDEFGHIJ
KLMNOPQRST
UVWXYZabcd
p4=0ABCDEFGHIJ
KLMNOPQRST
UVWXYZabcd
看见了吗?有两个进程在同时执行,一个是主进程(p4=1890),一个是子进程(p4=0),主子进程同时执行相同的语句,自然会执行两遍了。
与dos编程不同,linux是多任务,多用户的操作环境,编程时要认真考虑这一点。 |
|