#include <stdio.h>
#include <sys/wait.h>

void sig_chld(int signo) {
    pid_t pid;
    int stat;

    while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0) {
        printf("child %d terminated\n", pid);
    }
    return;
}

注:选项WNOHANG告知waitpid在尚有未终止的子进程在运行时不要阻塞