关于waitpid()函数的看法,该如何解决

关于waitpid()函数的看法
看unix网络编程第一卷的时候,碰到书上这样一个例子:
一个并发服务器, 每一个客户端连接服务器就fork一个子进程.书上讲到当同时有n多个客户端断开连接时,
服务器端同时有n多个子进程终止, 这时候内核同时向父进程发送n多个sigchld信号.它的sigchld信号处理
函数如下:
void sig_chld(int signo)
{
       pid_t   pid;
       int     stat;
       
       while((pid = waitpid(-1, &stat, WNOHANG)) > 0){
               printf("child %d terminated\n", pid);
       }
        return;
}
我想问的是, 为什么在waitpid()的函数外套上一个while循环呢?
个人理解: 理论上说, 如果n个客户端同时发送sigchld信号,就算服务器端只接收到一个sigchld信号,waitpid这个系统调用内部会把所有的僵尸孩子都处理掉,那为啥外面还有个while呢?
------解决思路----------------------
你man waitpid一下就知道waitpid的返回值是退出程序的pid了,既然返回的是pid,那一次只处理一个进程,如果多个进程同时退出,父进程只收到一个SIGCHLD,所以在SIGCHLD信号的处理函数里面要处理所有退出的进程,所以需要while循环一个一个的把退出的子进程处理掉