Problem 2: Zombies!

The following code simulates a shell that executes ls in each round.

/* Wait/problematic2.c */
#include <stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
    while(1)
    {
        printf("Press Enter to execute ls");
        while(getchar() != '\n');
        if(!fork())
        {
            execl("/bin/ls","ls",NULL);
        }
        else
        {
            sleep(1);
         }
    }
    return 0;
}

The program will run without apparent problems. However, if you look at the system process...

Zombies appear!!

This is the consequence of the mishandling in the parent process- the parent ignores the SIGCHID signal.