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

关于signal ()

    来源: 互联网  发布时间:2014-11-19

    本文导语:  在父进程中,为了处理僵尸子进程,声明子进程信号处理。 但发现只能处理第一个被fork的子进程,以后的就不再对信号进行相应了。 只有把signal()放到while (1)循环中,才能处理每一个被fork的子进程。 看了参考书,好...

在父进程中,为了处理僵尸子进程,声明子进程信号处理。
但发现只能处理第一个被fork的子进程,以后的就不再对信号进行相应了。
只有把signal()放到while (1)循环中,才能处理每一个被fork的子进程。
看了参考书,好像signal没必要这样调用的。

哪位大虾能给予详尽解释?//bow 

void sig_chld (int signo)
{
    waitpid (...);
}

main ()
{
    ...

    signal (SIGCHLD, sig_chld);
    while (1)
    {
         fork ();

    }
}

|
看一下signal()联机文档:
...  If  signal()  is  used,  disp  is  the
address of a signal handler, and sig is not SIGILL, SIGTRAP,
or SIGPWR, the system first sets the signal's disposition to
SIG_DFL before executing the signal handler...

所以一般signal的使用方法是:

void sig_chld (int signo)
{
    signal (SIGCHLD, sig_chld); // Must be declared again.

    waitpid (...);
}


to wake2000(coucou) :
"waitpid只能针对特定的pid子进程"
waitpid 也可对所有子进程, waitpid(-1,...)

|
其实waitpid只能针对特定的pid子进程,如果单单是为了处理僵死进程,建议用
signal( SIGCHLD, SIG_IGN );
signal( SIGCLD, SIG_IGN );
直接将子进程返回的信号丢掉就可以了。

如果实在要用waitpid的话,可以开个指针,动态分配空间存储子进程的pid。

|
signal()函数在设置的使用只有一次有效,一旦接收信号后处理函数复原。

    
 
 

您可能感兴趣的文章:

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












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


  • 站内导航:


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

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

    浙ICP备11055608号-3