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

求助~~无限循环调用sognal()函数会不会造成系统死机或有什么副作用?

    来源: 互联网  发布时间:2016-05-15

    本文导语:  是这么回事,我公司的一个项目某个模块里,发现了一个bug,就是当多线程开启的时候,之前设置在signal()里的信号就会自动失效,例如表现为Ctrl-C无效。 我初步估计是某个函数或代码段自动屏蔽了信号,但是上网查...

是这么回事,我公司的一个项目某个模块里,发现了一个bug,就是当多线程开启的时候,之前设置在signal()里的信号就会自动失效,例如表现为Ctrl-C无效。
我初步估计是某个函数或代码段自动屏蔽了信号,但是上网查了很多资料,发现会自动屏蔽信号的函数在我们这个模块里都没用到。或者有我不了解。
最后我采用折中的办法,在程序某个地方重新调用signal(),似乎是跳过了屏蔽信号的代码段,信号又有效啦。
但今天发现可能会有隐患,因为我似乎是把signal()放在一个循环里,或者说程序运行时可能会反复调用signal(),而且我们那个系统一旦启动是不关机的。。。
我不知道反复调用signal()会不会有副作用,比如反复调用malloc()系统肯定死机。signal()是不是每次调用只占用的栈空间,这样函数返回时占用的资源会自动撤销。
如果会调用堆空间就完啦。
希望懂得signal()原理的帮个忙啊,谢谢~~~~~~~~~~~~~~

|
比如反复调用malloc()系统肯定死机,那是因为你申请了资源没有释放,当然会宕机了,呵呵~~~

就看你这signal()是否合理,系统中很多函数为了保证不可重入性,会采取不允许抢占的方式。如果你的sig是实时性要求很强的话,你的做法是可以接受的,我认为应该没有宕机的危险。

如果你是进程间的通信有很多方式可以进行,如管道、共享内存等,如果是内核给用户态发送消息的话,也可以使用netlink等手段,其实个人认为使用信号(除非非使用不可的话),不是一个最好的方法

|
首先 无限循环调用 signal肯定不是个合理的编程方式

其次 应该不会让程序 down掉,它只是安装一个 sig_handler而已了,替换掉原来的handler.

最后,自己也可以写小程序 运行看看, while(signal() != NULL); 看看 内存有没有一直下降。

|
发现了一个bug,就是当多线程开启的时候,之前设置在signal()里的信号就会自动失效,例如表现为Ctrl-C无效。

===================================

Linux implements threads as separate processes, sharing resources using 
clone(2). Because of this, the behavior of threads on Linux differs from that 
on other implementations when it comes to signals. In the POSIX.1 thread model,
 asynchronous signals are sent to a process, and then an individual thread 
within the process is selected to receive the signal, based on which threads 
are not currently blocking the signal. On Linux, an asynchronous signal is sent
 to a particular thread, and since each thread executes as a separate process, 
the system is unable to select a thread that isn't currently blocking the 
signal. The result is that the thread may not notice the signal.

Excerpt from APUE V2 ch12.8

|
你可以查一下为什么会"某个函数或代码段自动屏蔽了信号"?另外....建议你用sigaction这个FUN...

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












  • 相关文章推荐
  • ▲ 紧急求助: 如何在打开一个链接时,调用一个JAVABEAN ? ▲
  • 重分求助!!!!javascript如何调用客户端dll问题
  • [求助]如何获取一个程序所使用的系统调用和参数?
  • 高分求助:在java中如何调用outlook express,急,急,急!!
  • 【求助】:如何用ioctl()函数调用一个驱动程序
  • 求助:能给出一个在jsp里调用ActiveX控件的代码吗?
  • 求助!!shell调用问题
  • [求助]popen 函数引起 shell 调用, sh 成为僵尸进程.
  • C++如何调用库里面的C函数?求助~~
  • 求助:内核系统调用的使用问题
  • 【求助】如何增加一个系统调用
  • 求助关于Java调用shell再传值给shell的问题
  • 求助socket编程问题:C/S模式.客户端调用Winsock函数connect()的时候,返回错误码是10065(主机路由不可达).
  • 高分求助有关利用Linux的系统调用read()实现
  • 求助panel之间方法调用的问题(非常焦急)
  • linux共享库调用求助
  • 求助 ubuntu系统下C开发调用内核函数总报ndefined reference错误
  • 100分急求助linux 下如何调用api来控制软件的读入数据的方式?面试的题,在线等!帮帮小弟忙呀!
  • 系统调用小实验_新手求助
  • 有关fork()调用的初级问题,急急急!!!高分求助。
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题


  • 站内导航:


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

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

    浙ICP备11055608号-3