wait只等待一个孩子.你应该叫wait(NULL)一个循环,直到它返回-1有errno == ECHILD:
while (wait(NULL) != -1 || errno != ECHILD) { }
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)ECHILD (for wait())呼叫过程没有任何未经等待的孩子.
Run Code Online (Sandbox Code Playgroud)EINTRWNOHANG没有设置,并且发现了一个未阻止的信号或SIGCHLD; 见信号(7).
因此,您必须检查ECHILD,以免被捕获的信号所迷惑.