#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个进程筛质数