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

对信号处理函数的迷惑!

    来源: 互联网  发布时间:2015-12-17

    本文导语:  各位高手们,我现在看一本linux入门书,看到里面对于信号处理函数的讲解,对于有些部分不能理解,希望大家帮我讲讲。 如果在main函数里面写了一个信号处理函数的调用,例如:signal(SIGALRM,on_alarm), 但是怎么在实...

各位高手们,我现在看一本linux入门书,看到里面对于信号处理函数的讲解,对于有些部分不能理解,希望大家帮我讲讲。
如果在main函数里面写了一个信号处理函数的调用,例如:signal(SIGALRM,on_alarm), 但是怎么在实际定义这个信号处理函数的时候,又在on_alarm函数内部出现了signal(SIGALRM, on_alarm)呢?这样不是递归了吗?那怎么跳出递归函数呢?

比如说:
void main()
{
    ...
    sihnal(SIGALRM, on_alarm);
    ...
}

void on_alarm()
{
    signal(SIGALRM, on_alarm);
    ...
}

诸位理解这个意思的请帮我讲讲,多谢了!
  


|
(1)执行signal(SIGALRM,on_alarm),是注册SIGALRM信号的处理函数为on_alarm,这时on_alarm不会被执行。当进程接收到SIGALARM的时候,on_alarm才调用。
(2)在on_alarm里面又调用了signal(SIGALRM,on_alarm)进行注册。是因为:用户注册的信号处理函数只能有效一次,要想继续有效,继续使用on_alarm处理今后的SIGALARM信号,必须再次注册。

|
这样不是递归了吗?那怎么跳出递归函数呢?

这种写法是不可靠的信号处理方试,为了防止在信号处理函数on_alarm时对另一个到来的SIGALRM丢失(其实是默认处理)
楼主认为的递归一般是不存在的,除非你连续不断地发送SIGALRM信号,这时才会递归地调用signal不断地捕捉该信号.

采用sigaction就不会有这样的问题了.


|
应该不是纠错吧
1.来了SIGALARM都发送给此进程
2.在on_alarm里面又调用了signal(SIGALRM,on_alarm),是因为在有的系统中默认的一个信号处理函数只能有效一次,如果你的系统不是,那一句也可以去掉,
3.可以用sigaction,开始就设置好

    
 
 

您可能感兴趣的文章:

  • 信号处理函数里面用CRT函数可能导致"信号触发-处理"死循环吗?
  • linux下类的成员函数不可以作为自定义的信号处理函数么?
  • 进入信号处理函数,是不是会自动把进入信号加入信号屏蔽字?还有sigpending
  • Linux,aix,windows下可以查询非本进程的信号处理函数吗?
  • linux的信号处理函数中如何访问共享资源
  • c++中怎么写sigaction()中的信号处理函数
  • 关于系统信号处理函数signal()的疑问.
  • 为什么作了信号处理之后select函数就不能正常工作了?
  • 请教信号量处理函数signal的问题?
  • 请问:signal(), sigaction()函数会不会使自已所有的进程挂起啊,(这样就等接收各种信号,进行一些处理工作啊)
  • 求助:linux信号处理的默认函数宏定义怎么理解呢?
  • 小白请教关于Listen、accept、信号处理函数、waitpid的几个问题
  • 信号处理函数的问题
  • 信号处理中sleep函数失效的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于linux内核中信号处理的问题?(信号处理的时间)
  • 信号处理中sleep函数失效的问题 iis7站长之家
  • 为何信号处理没有及时被处理呢?
  • *** 求助!!! 关于(可靠)信号处理的问题 ***
  • 信号处理中的SIGBUS
  • 一个关于信号处理的问题
  • 地震信号处理工具包 Seismic ToolKit
  • linux信号处理程序
  • posix信号处理的一个问题
  • 一段关于信号处理的代码看不懂?
  • 在执行信号处理程序来一个信号会怎么样?
  • C++信号处理库 SP++
  • 命名管道是不是一定要配合信号处理
  • 关于信号处理的问题
  • 请教:多线程模式下的信号处理问题
  • linux编程中简单的信号处理问题,请教各位,谢谢。
  • 数字信号处理算法 Feldspar
  • 一个幼稚的信号处理问题
  • 数学、信号处理、通讯类C++库 IT++
  • linux信号处理问题SIGPIPE


  • 站内导航:


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

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

    浙ICP备11055608号-3