LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: top

非常感谢kj501

[复制链接]
发表于 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是多任务,多用户的操作环境,编程时要认真考虑这一点。
 楼主| 发表于 2002-11-12 21:07:05 | 显示全部楼层
那怎么办 ?
我只想让他执行一次!
发表于 2002-11-12 21:09:30 | 显示全部楼层
那就没有必要用fork()函数了
 楼主| 发表于 2002-11-12 21:12:36 | 显示全部楼层
那怎么调用进程?
发表于 2002-11-12 21:16:11 | 显示全部楼层
我觉得你对fork()函数的理解有问题。建议你好好看看这个http://www.china-pub.com/computers/emook/0439/info.htm
 楼主| 发表于 2002-11-12 21:18:24 | 显示全部楼层
好的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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