wait与waitpid的区别:
pid_t wait(int *statloc);
pid_t waitpid(pid_t pid, int *statloc, int options);
相同的:wait和waitpid都返回两个值:函数返回值是已终止子进程的进程ID号,子进程的终止状态(一个整数)则通过statloc指针返回。
如果调用wait的进程没有已终止的子进程,不过有一个或多个子进程仍在执行,那么wait将阻塞到现有子进程第一个终止为止,而其它子进程将会变为僵死进程。而当多个相同的信号在信号处理函数执行之前产生,而信号处理函数只执行一次,因为UNIX信号一般是不排队的,这种又是不确定的,有的时候信号处理函数可能会处理二次或三次,这种情况的时候,为了有效防止僵死进程的产生,正确的解决方法是调用waitpid函数而不再是使用wait函数了,一般的解决方案为:在一个循环内调用waitpid,以获取所有已终止子进程的状态,必须指定WNOHANG选项,它告知waitpid在有尚未终止的子进程在运行时不要阻塞。
pid_t wait(int *statloc);
pid_t waitpid(pid_t pid, int *statloc, int options);
相同的:wait和waitpid都返回两个值:函数返回值是已终止子进程的进程ID号,子进程的终止状态(一个整数)则通过statloc指针返回。
如果调用wait的进程没有已终止的子进程,不过有一个或多个子进程仍在执行,那么wait将阻塞到现有子进程第一个终止为止,而其它子进程将会变为僵死进程。而当多个相同的信号在信号处理函数执行之前产生,而信号处理函数只执行一次,因为UNIX信号一般是不排队的,这种又是不确定的,有的时候信号处理函数可能会处理二次或三次,这种情况的时候,为了有效防止僵死进程的产生,正确的解决方法是调用waitpid函数而不再是使用wait函数了,一般的解决方案为:在一个循环内调用waitpid,以获取所有已终止子进程的状态,必须指定WNOHANG选项,它告知waitpid在有尚未终止的子进程在运行时不要阻塞。