C:sem_wait()不会因信号而中断

时间:2016-01-15 03:24:26

标签: c posix

我正在编写一个使用信号量并处理信号的服务器 - 客户端程序 信号处理程序设置

struct sigaction sAction;  
sAction.sa_handler = handle_signal;  
sigaction(SIGINT, &sAction, NULL);  
sigaction(SIGTERM, &sAction, NULL );  
...  
static void handle_signal(int signal){  
   fprintf(stdout,"handle signal %d \n",signal);  
   run = 0;  
}

服务器中只有一个地方我呼叫sem_wait()

 fprintf(stdout,"before wait\n");    
 if(sem_wait(serverS) == 0){   
    fprintf(stdout,"not interrupted\n");  
    ....  
 }else{  
    fprintf(stdout,"interrupted on wait server sem\n");
 }

当我致电kill -SIGINT pId并且我在sem_wait()时,方法不会被打断 但是,会调用handle_signal并将handle signal 2写入stdout 我的外壳

before wait  
kill -SIGINT pID  
handle signal 2  

clientfgets有同样的问题,也不会被打断。
据我所知,只要我不使用SA_RESTART flag并且不忽略 信号,方法就会中断。

我是否误解了某些内容或者我遗失了什么?

0 个答案:

没有答案