wait() と waitpid() の違いの 1 つは、waitpid に、まだ終了していない実行中の子がある場合にブロックしないように指示する WNOHANG オプションがあることです。そのような:
while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0)
printf("Child %d terminated\n", pid);
waitpid() の代わりに wait() を使用すると、まだ終了していない実行中の子プロセスがある場合に、wait() がブロックされるのを防ぐ方法はありません。ただし、ブロックする可能性がありますが、ここで wait() が正常に機能するかどうかは疑問です。