举个例子说明多进程的应用。求素数。编译之后,运行的时候 time ./a.out 可以看到运行时间,会发现后者节省了很多时间
如果不想看输出,指向看运行时间的话: time ./a.out > /dev/null 把输出重定向到null
//==================未使用fork进程 单机版==========================
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#define LEFT 30000000
#define RIGHT 30000200
int main()
{
int i,j,mark;
for(i = LEFT;i<=RIGHT;i++)
{
mark = 1;
for(j = 2;j<i/2;j++)
{
if(i%j == 0)
{
mark = 0;
}
}
if(mark==1)
printf("%d is a primer\n",i);
}
exit(0);
}
//====================使用fork的 多进程版====================================
//运行结果是无顺序的,或者命令行先出来,结果后出来
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#define LEFT 30000000
#define RIGHT 30000200
int main()
{
int i,j,mark;
pid_t pid;
for(i = LEFT;i<=RIGHT;i++)
{
fflush(NULL);
pid =fork();
if(pid<0)
{
perror("fork()") ;
exit(1);
}
if(pid ==0)
{
mark = 1;
for(j = 2;j<i/2;j++)
{
if(i%j == 0)
{
mark = 0;
break;
}
}
if(mark)
printf("%d is a primer\n",i);
exit(0);//进程结束,需要exit
}
}
exit(0);
}