当前位置:  技术问答>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
不知为什么?为什么不调用信号处理函数?请高手指教!

|
act.sa_handler=sigusr1_handler;
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,就没有关联函数进行处理了,一般二者取其一。

|
这两个在数据结构里是一个union

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问,在linux中rt_sigaction和sigaction有什么区别
  • 如何用sigaction( )捕获到任何可以被捕获的信号?
  • signal和sigaction区别
  • sigaction这里为什么没有效果,求分析.
  • 调用sigaction却没反应,请帮忙看看!!
  • sa_sigaction 如何用第三个参数
  • 信号的"安全和不安全",仅仅是指signal()和sigaction()的区别么?
  • 论坛 iis7站长之家
  • 问问关于sigfillset 和 sigaction:看如下代码
  • 請教sigaction函數的用法
  • 用sigaction & sigqueue 实现进程间通信


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3