当前位置: 技术问答>linux和unix
sigaction函数问题
来源: 互联网 发布时间:2017-01-08
本文导语: #include #include #include void sigusr1_handler(int signo) { printf("catch SIGUSR1n"); sleep(5); printf("back to mainn"); } int main() { struct sigaction act; act.sa_handler=sigusr1_handler; act.sa_flags=SA_NODEFER; act.sa_sigaction=NULL; sigemptyset(&act.sa_mask); if(sigact...
#include
#include
#include
void sigusr1_handler(int signo)
{
printf("catch SIGUSR1n");
sleep(5);
printf("back to mainn");
}
int main()
{
struct sigaction act;
act.sa_handler=sigusr1_handler;
act.sa_flags=SA_NODEFER;
act.sa_sigaction=NULL;
sigemptyset(&act.sa_mask);
if(sigaction(SIGUSR1,&act,NULL)==-1)
{
perror("fail to set handler for SIGUSR1");
exit(1);
}
printf("process beginn");
sleep(15);
printf("donen");
return 0;
}
运行后:
process begin
此时我在另一个终端输入:kill -USR1 2344
结果没有调用信号处理函数,只是显示:用户定义信号 1
不知为什么?为什么不调用信号处理函数?请高手指教!
#include
#include
void sigusr1_handler(int signo)
{
printf("catch SIGUSR1n");
sleep(5);
printf("back to mainn");
}
int main()
{
struct sigaction act;
act.sa_handler=sigusr1_handler;
act.sa_flags=SA_NODEFER;
act.sa_sigaction=NULL;
sigemptyset(&act.sa_mask);
if(sigaction(SIGUSR1,&act,NULL)==-1)
{
perror("fail to set handler for SIGUSR1");
exit(1);
}
printf("process beginn");
sleep(15);
printf("donen");
return 0;
}
运行后:
process begin
此时我在另一个终端输入:kill -USR1 2344
结果没有调用信号处理函数,只是显示:用户定义信号 1
不知为什么?为什么不调用信号处理函数?请高手指教!
|
act.sa_handler=sigusr1_handler;
act.sa_flags=SA_NODEFER;
act.sa_sigaction=NULL;
不要同时设置sa_handler和sa_sigaction这两个字段
act.sa_flags=SA_NODEFER;
act.sa_sigaction=NULL;
不要同时设置sa_handler和sa_sigaction这两个字段
|
1楼回答正确。把act.sa_sigaction=NULL;这一行注释掉。
sa_handler以及*_sa_sigaction都是指定信号关联函数,只是参数不同而已,act.sa_sigaction=NULL,就没有关联函数进行处理了,一般二者取其一。
sa_handler以及*_sa_sigaction都是指定信号关联函数,只是参数不同而已,act.sa_sigaction=NULL,就没有关联函数进行处理了,一般二者取其一。
|
这两个在数据结构里是一个union