fork() in for() loop
c, fork
Solution
Daniel Fischer forced me to provide an answer.
Change:
if(fork()==-1){} // first fork
if(fork()==0){} // second fork
To:
pid = fork();
if(pid == -1)
{
... //failed
}
else if(pid == 0)
{
... //success
}
Or use a switch statement:
switch(fork())
{
case -1:
... // failed
break;
case 0:
... // success
break;
}
Problem
I'm trying to make a homework assignment where I have to use `fork()` but I don't know why I can't stop my forks after running them through my for loop: ``` #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> int main(int argc, char *argv[]){ int limit = argc/2; if(argc%2 == 0){ perror("the number of arguments given must pe even!"); exit(1); } int i; for(i=0; i<=limit; i++){ if(fork()==-1){ perror("childes couldn't be created\n"); exit(1); } if(fork()==0){ printf("fork: %d \n",i); exit(1); } wait(0); } printf("exiting...\n"); return 0; } ``` Output: ``` warzaru@ubuntu:~/OS/UprocH$ ./exe a b c d fork: 0 fork: 0 fork: 1 fork: 1 fork: 1 fork: 2 fork: 2 fork: 1 fork: 2 exiting... exiting... fork: 2 exiting... exiting... fork: 2 exiting... exiting... exiting... warzaru@ubuntu:~/OS/UprocH$ fork: 2 fork: 2 fork: 2 exiting... ```