#define LEFT 30000000
#define RIGHT 30000200
#define N 3
int main()
{
pid_t pid;
int i,j,mark;
for(n=0;n<N;n++)
{
pid=fork();
//失败
if(pid<0)
{
perror("fork()");
//todo 把创建的资源回收 fork 出去的wait回来
exit(1);
}
if(pid==0)//如果是子进程就干活
{
for(i=LEFT+n;i<=RIGHT;i+=N)
{
mark=1;
for(j=2;j<i/2;j++)
{
if(i%j==0){
mark=0;
break;
}
}
if(mark)
printf("[%d]%d is a primer\n",n,i);
}
exit(0);
}
}
for(n=0;n<N;n++)
wait(NULL);
exit(0);
}
- 结果是1号也就是0永远拿不到一个质数
- 用n个进程筛质数