waitpid在使用时出现EINTER毛病
EINTR毛病是指当操作被信号中断时,系统调用会返回EINTR毛病。在使用waitpid函数时,可能会出现EINTR毛病的缘由有以下几种:
1. 当前进程收到一个信号,例如SIGCHLD信号(子进程状态改变信号),致使waitpid函数被中断。
2. 当前进程设置了一个信号处理函数,该处理函数在waitpid函数调用期间被触发。
3. 当前进程设置了SA_RESTART标志,使得系统调用在被信号中断后会自动重启,因此waitpid函数被中断后会重新调用。
为了处理这类情况,可以在waitpid函数的毛病处理部份进行重试,直到成功返回或遇到其他毛病。以下是一个示例代码:
```c
pid_t waitpid_retry(pid_t pid, int *status, int options) {
pid_t result;
while ((result = waitpid(pid, status, options)) == ⑴) {
if (errno == EINTR) {
continue;
} else {
perror("waitpid");
break;
}
}
return result;
}
```
在调用waitpid_retry函数时,如果waitpid函数返回EINTR毛病,它会继续重试,直到成功返回或遇到其他毛病。这样可以确保不会由于信号中断而致使waitpid函数没法正常返回。
TOP