我的应用程序有两个线程。每个线程通过每个套接字从服务器接收一些数据。线程等待返回 epoll_wait()。有时 epoll_wait() 返回 -1 而 errno 是 EINTR。EINTR 表示系统 call() 被信号中断。我添加到处理 EINTR。但是我不知道什么信号到达以及为什么信号到达。我想知道。
方法一。
我创建了一个线程。
sigset_t sMaskOfSignal;
sigset_t sOldMaskOfSignal;
sigfillset(&sMaskOfSignal);
sigprocmask(SIG_UNBLOCK, &sMaskOfSignal, &sOldMaskOfSignal)
while(1)
{
sigwait(&sMaskOfSignal, &sArrivedSignal);
fprintf(stdout, "%d(%s) signal caught\n", sArrivedSignal, strsignal(sArrivedSignal));
}
当 epoll_wait() 被中断时,我无法捕捉到信号。
方法二
当我在 strace 工具中执行我的应用程序时,epoll_wait() 永远不会被中断。
我的问题在 GDB 工具中重现得很好。我需要帮助......