Продолжайте вызывать wait (2) в цикле.Каждый раз, когда возвращается функция wait (), вы получаете PID вышедшего дочернего элемента и его статус .Статус сообщит вам, вышел ли он нормально (с кодом выхода) или из-за сигнала.Как то так (не тестировалось):
#include <sys/types.h>
#include <sys/wait.h>
...
pid_t pid;
int status;
...
while ((pid = wait(&status)) > 0) {
printf("Child %lu ", (unsigned long)pid);
if (WIFEXITED(status))
printf("exited with status %d\n", WEXITSTATUS(status));
else if (WIFSIGNALED(status))
printf("killed by signal %d\n", WTERMSIG(status));
else if (WIFSTOPPED(status))
printf("stopped by signal %d\n", WSTOPSIG(status));
else if (WIFCONTINUED(status))
printf("resumed\n");
else
warnx("wait(2) returned for no discernible reason");
}