I'm writing a program to stress test the scheduler on a unix distribution. I'm creating a user specified number of processes using fork() and each process should work out prime numbers up to 1000. I'm using a for loop to create the specified number of processes but my program creates too many. I know I need to make sure only the parent forks but i'm just not sure how. Any guidance you could give me would be a massive help. Thanks
Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
int prime_calc(int prime_range) {
int prime = 1;
int i;
int p;
for(i = 0; i <= prime_range; i++) {
for(p = 2; p <= prime_range; p++) {
if( i != p && i % p == 0) {
prime = 0;
break;
}
}
if(prime == 1) {
printf("Prime: %d\n", i);
}
prime = 1;
}
return 0;
}
int main() {
int prime_range = 1000;
int i;
int pid;
int pid1;
for(i = 0; i < 3; i++) {
pid1 = fork();
}
if(pid1==-1) {
perror("bad fork");
exit(0);
}
if(pid1==0) {
pid = getpid();
printf("The process id is: %d\n", pid);
prime_calc(prim e_range);
}
else {
wait(0);
}
return 0;
}
Code:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
int prime_calc(int prime_range) {
int prime = 1;
int i;
int p;
for(i = 0; i <= prime_range; i++) {
for(p = 2; p <= prime_range; p++) {
if( i != p && i % p == 0) {
prime = 0;
break;
}
}
if(prime == 1) {
printf("Prime: %d\n", i);
}
prime = 1;
}
return 0;
}
int main() {
int prime_range = 1000;
int i;
int pid;
int pid1;
for(i = 0; i < 3; i++) {
pid1 = fork();
}
if(pid1==-1) {
perror("bad fork");
exit(0);
}
if(pid1==0) {
pid = getpid();
printf("The process id is: %d\n", pid);
prime_calc(prim e_range);
}
else {
wait(0);
}
return 0;
}
Comment