LinuxSir.cn,穿越时空的Linuxsir!

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

多进程编程(fork函数)

[复制链接]
发表于 2004-5-15 10:27:45 | 显示全部楼层 |阅读模式
哪位帮我一下!!??
我在编写一个用到多进程的程序,看了好多的书都是如下写的:
____________________________________
void main()
{
int i;
if ( fork() == 0 ) {
/* 子进程程序 */
for ( i = 1; i <1000; i ++ )
printf("This is child process\n");
}
else {
/* 父进程程序*/
for ( i = 1; i <1000; i ++ )
printf("This is process process\n");
}
}
  程序运行后,你就能看到屏幕上交替出现子进程与父进程各打印出的一千条信息了。如果程序还在运行中,你用ps命令就能看到系统中有两个它在运行了。
_____________________________________
但是,我在编译这个程序的时候出现如下警告错误:
──────────────────────
ttr.c: In function `main':
ttr.c:2: warning: return type of `main' is not `int'
──────────────────────
然后,运行结果也不是象书上所说的,
而是先打印出999行“This is child process”
再打印出999行“This is process process”

或者先打印出999行“This is process process”
再打印出999行“This is child process”

哪位能给我解决一下这个问题,我先谢谢了!!
发表于 2004-5-15 11:16:08 | 显示全部楼层

回复: 多进程编程(fork函数)

最初由 sunheart 发表
哪位帮我一下!!??
我在编写一个用到多进程的程序,看了好多的书都是如下写的:
____________________________________
void main()
{
int i;
if ( fork() == 0 ) {
/* 子进程程序 */
for ( i = 1; i <1000; i ++ )
printf("This is child process\n");
}
else {
/* 父进程程序*/
for ( i = 1; i <1000; i ++ )
printf("This is process process\n");
}
}
  程序运行后,你就能看到屏幕上交替出现子进程与父进程各打印出的一千条信息了。如果程序还在运行中,你用ps命令就能看到系统中有两个它在运行了。
_____________________________________
但是,我在编译这个程序的时候出现如下警告错误:
──────────────────────
ttr.c: In function `main':
ttr.c:2: warning: return type of `main' is not `int'
──────────────────────
然后,运行结果也不是象书上所说的,
而是先打印出999行“This is child process”
再打印出999行“This is process process”

或者先打印出999行“This is process process”
再打印出999行“This is child process”

哪位能给我解决一下这个问题,我先谢谢了!!


这只是警告信息吧,只是指不符合标准C的语法而已,但还是能编译通过,你看看你的目录下是不是已经有了编译结果文件了?

我试了一下已经编译出文件了
发表于 2004-5-15 11:31:54 | 显示全部楼层
ISO C99要求main是返回int
发表于 2004-5-15 12:25:57 | 显示全部楼层

回复: 多进程编程(fork函数)

最初由 sunheart 发表
哪位帮我一下!!??
我在编写一个用到多进程的程序,看了好多的书都是如下写的:
____________________________________
void main()
{
int i;
if ( fork() == 0 ) {
/* 子进程程序 */
for ( i = 1; i <1000; i ++ )
printf("This is child process\n");
}
else {
/* 父进程程序*/
for ( i = 1; i <1000; i ++ )
printf("This is process process\n");
}
}
  程序运行后,你就能看到屏幕上交替出现子进程与父进程各打印出的一千条信息了。如果程序还在运行中,你用ps命令就能看到系统中有两个它在运行了。
_____________________________________
但是,我在编译这个程序的时候出现如下警告错误:
──────────────────────
ttr.c: In function `main':
ttr.c:2: warning: return type of `main' is not `int'
──────────────────────
然后,运行结果也不是象书上所说的,
而是先打印出999行“This is child process”
再打印出999行“This is process process”

或者先打印出999行“This is process process”
再打印出999行“This is child process”

哪位能给我解决一下这个问题,我先谢谢了!!

那是啦
fork的进程是子进程,是同时和父进程存在的
前面看错了
之所以出现先打999行子进程然后是999行父进程
或者反过来
原因应该是两进程是同时运行的,由cpu的分时处理吧
999对计算机的处理速度来说我想应该是一瞬间吧,所以在一个分片时间里应该能够完成。
想证明上述猜测可以做个实验,你在打印后面各加个等待函数,等待若干秒
上面4我的猜测,有兴趣可以试下
 楼主| 发表于 2004-5-15 16:13:43 | 显示全部楼层

thanks!!

好的,谢谢楼上的各位,我再试试,

还要重启,真实麻烦,
发表于 2004-5-15 16:41:16 | 显示全部楼层
#include <sys/types.h>
#include <stdio.h>
#include "ourhdr.h"
#include "error.c"
#include <sys/stat.h>

int main()
{
int i,j;
if ( fork() == 0 ) {
        for ( i = 1; i <1000; i ++ )
                {printf("This is child process\n");
        sleep(1);}      }
else {
        for ( j = 1; j <1000; j ++ )
        {printf("This is process process\n");
        sleep(1);}}
}
试一下这个,或者用一个互斥机制实现~~
发表于 2004-5-16 09:22:15 | 显示全部楼层
同意楼上~~~~~~~

fork后进程同时运行,打印结果是不可预测的,顺序随机,书上错了   
 楼主| 发表于 2004-5-16 09:27:29 | 显示全部楼层

谢谢各位!!

对了!谢谢各位!!
发表于 2004-5-16 09:49:44 | 显示全部楼层
现在可能你的机器都是P4了,以前写书的时候,人家可能还在386上跑程序。因此一个分片时间无法全部运行1000条print语句。也不能说书错了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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