我正在编写一个使用信号量并处理信号的服务器 - 客户端程序 信号处理程序设置
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
client
与fgets
有同样的问题,也不会被打断。
据我所知,只要我不使用SA_RESTART
flag
并且不忽略 信号,方法就会中断。
我是否误解了某些内容或者我遗失了什么?