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... ```

Original source