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之类的失效。