函数wait和waitpid
一、当一个进程正常或者异常终止时,内核就向其父进程发送SIGCHLD信号。
因为子进程终止是一个异步事件(可以在父进程运行的任何时候发生),所以这种信号也是内核向父进程发的异步通知。
调用wait和waitpid的进程可能会发生什么?
- 如果其所有子进程都还在运行,则阻塞;
- 如果一个子进程已终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回;
- 如果它没有任何子进程,则立即出错返回;
如果进程由于接收到SIGCHLD信号而调用wait,我们期望wait会立即返回。但是如果在随机时间点调用wait,则进程可能会阻塞。
二、wait和waitpid的区别:
在一个子进程终止前,wait使其调用者阻塞,而waitpid有一个选项,可使调用者不阻塞。
如果一个进程有几个子进程,那么只要有一个子进程终止,wait就返回;