在使用waitpid
函數時,如果出現EINTR
錯誤,表示調用被中斷,即接收到了一個信號。解決這個問題的一種方法是重新調用waitpid
函數。
可以使用一個循環來重試waitpid
函數,直到成功返回或者出現其他錯誤。示例代碼如下:
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>
pid_t waitpid_retry(pid_t pid, int *status, int options) {
pid_t result;
while ((result = waitpid(pid, status, options)) == -1) {
if (errno == EINTR) {
continue; // 被中斷,則重新執行waitpid
} else {
perror("waitpid");
break;
}
}
return result;
}
在調用waitpid_retry
函數時,如果返回值不是-1,表示等待成功,否則可以根據需要進行處理。
注意:waitpid_retry
函數只是一種簡單的處理方式。在實際使用中,可能需要根據具體需求做出適當的修改。