子进程无论是正常或异常退出,内核都会向父进程发送信号 SIGCHILD.,因为无论是使用wait函数(阻塞),还是使用waitpid(得循环判断)都会将父进程阻塞住,而不能执行别的操作,所以,如果父进程还需要执行别的操作,就将wait/waitpid函数置于信号捕捉函数中就可以解决这个问题了,(当然也可以在父进程中单独起个线程来解决。)
wait函数、waitpid函数每次都只能回收一个子进程。
wait函数是通过waitpid函数封装的:
static inline pid_t wait(int * wait_stat)
{
return waitpid(-1,wait_stat,0);
}
1、区别1:返回值的区别
wait函数只有两个返回值,
成功返回回收的子进程id;
失败返回-1,errno被置为ECHILD。