当前位置:  技术问答>linux和unix

关于signal与setjmp的配合使用时遇到的一个问题

    来源: 互联网  发布时间:2016-12-29

    本文导语:  代码如下: jmp_buf env; void handle() {     printf("catch the signal!n");     longjmp(env,1); } int main() {     signal(SIGFPE,handle);     if(setjmp(env) != 0)     {       printf("first!n");     }     printf("second!n");     kill(0,SIG...

代码如下:
jmp_buf env;
void handle()
{
    printf("catch the signal!n");
    longjmp(env,1);
}
int main()
{
    signal(SIGFPE,handle);
    if(setjmp(env) != 0)
    {
      printf("first!n");
    }
    printf("second!n");

    kill(0,SIGFPE);

    printf("third!n");
    return 0;
}
运行结果:
second!
catch the signal!
first!
second!
third!
小弟有一事不明,按理说第二次second之后应该再次掉用kill,为什么没有,而是直接跳过去了呢,麻烦高手解答一下。

|
当收到SIGFPE信号后,进入信号处理函数,此时SIGFPE进入进程的信号屏蔽字,而楼主在信号处理函数中调用longjmp,这样就导致跳转而使SIGFPE依然留在进程的信号屏蔽字里,所以进程第二次不会再响应SIGFPE信号的请求了

|
你这个程序属于碰巧流,第一个kill发出以后,程序会继续往下跑,如果信号处理不及时程序早已经退出了。

你碰巧的是kill之后还没跑到third信号就被处理了,于是就有了你理想中的second->first->second->third。

第二次Kill呢,程序就是没来得及处理信号就结束了,所以就这样。

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












  • 相关文章推荐
  • java命名空间java.util.concurrent.locks接口condition的类成员方法: signal定义及介绍
  • signal 7和signal 11
  • 请教signal函数的用法!
  • 关于系统信号处理函数signal()的疑问.
  • 关于signal信号
  • signal函数定义该怎么理解?
  • 关于signal返回值是什么?
  • pending signal
  • signal函数的定义问题?搞不懂.
  • about "signal"
  • 有关signal handler,请教!
  • 关于signal函数
  • 关于signal函数的问题
  • signal handler 问题
  • signal的疑惑
  • signal的处理函数问题
  • signal 函数请教
  • 关于signal函数的问题,大家帮我看看
  • 关于signal ()
  • signal和sigaction区别
  • PPP问题fatal signal 11


  • 站内导航:


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

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

    浙ICP备11055608号-3