#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#define LEFTNUM 3000000
#define RIGHTNUM 3000200
#define N 3
int main(int argc,char** argv)
{
int mark=0;
pid_t pid;
for(int n=0;n<N;n++)
{
pid=fork();
if(pid<0)
{
perror("fork()");
exit(1);
}
if(pid==0)
{
//分配法分配数
for(int i=LEFTNUM+n;i<=RIGHTNUM;i+=N)
{
mark=1;
for(int j=2;j<i/2;j++)
{
if(i%j==0)
{
mark=0;
break;
}
}
if(mark==1)
{
//n展示哪一个进程进行计算//结果可得0进程不存在质数
printf("[%d]%d is a primer!\n",n,i);
}
}
exit(0);
}
}
//給子进程收尸
for(int n=0;n<N;n++)
wait(NULL);
exit(0);
}
结果:
book@100ask:~/tmpfile/process_basic$ ./forkwait0
[2]3000017 is a primer!
[1]3000061 is a primer!
[2]3000029 is a primer!
[1]3000073 is a primer!
[2]3000047 is a primer!
[1]3000103 is a primer!
[1]3000133 is a primer!
[2]3000077 is a primer!
[2]3000089 is a primer!
[1]3000181 is a primer!
[1]3000199 is a primer!
[2]3000131 is a primer!
[2]3000161 is a primer!
book@100ask:~/tmpfile/process_basic$ ./forkwait0 |wc -l
13