errno如果是4,表示被中断的系统调用。
怎么办?
- 自动重启
struct sigaction action; action.sa_handler = handler_func; sigemptyset(&action.sa_mask); action.sa_flags = 0; /* 设置SA_RESTART属性 */ action.sa_flags |= SA_RESTART; sigaction(SIGALRM, &action, NULL);
- 忽略信号
struct sigaction action; action.sa_handler = SIG_IGN; sigemptyset(&action.sa_mask); sigaction(SIGALRM, &action, NULL);
注意,这会导致alarm之类的失效。