注:
①si_code:表示信号来源,对于通过sigqueue()发送的实时信号来说,该字段为SI_QUEUE
②si_value:由进程使用sigqueue()发送信号时在value参数中指定
③signal()与sigaction()
sigaction()是建立信号处理器的首选API,较之signal()可移植性更佳。而往往使用signal()将信号处置设置为SIG_IGN或SIG_DFL。
例:用sigaction模拟signal函数
void handler(int sig)
{
printf("recv a sig=%d\n", sig);
}
__sighandler_t my_signal(int sig, __sighandler_t handler)
{
struct sigaction act;
struct sigaction oldact;
act.sa_handler = handler;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if (sigaction(sig, &act, &oldact) < 0)
return SIG_ERR;
return oldact.sa_handler;
}
int main(int argc, char *argv[])
{
struct sigaction act;
sigset_t sa_mask;
act.sa_handler = handler;
act.sa_flags = 0;
sigemptyset(&act.sa_mask);
//测试信号安装函数
//sigaction(SIGINT, &act, NULL);
//模拟signal函数
my_signal(SIGINT, handler);
for (;;)
{
pause();
}
return 0;
}