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

用sigaction设置了捕捉函数,为什么进程仍然会被终止

    来源: 互联网  发布时间:2017-01-31

    本文导语:  捕捉函数什么都没干,仅仅一个return。 sigaction结构的sa_mask成员也设置成该信号了,但进程还是会被该信号给终止掉,不解。 该信号是我用timer_create生成的timer产生的。 另外顺便问一下,貌似被信号终结时不一定都...

捕捉函数什么都没干,仅仅一个return。
sigaction结构的sa_mask成员也设置成该信号了,但进程还是会被该信号给终止掉,不解。
该信号是我用timer_create生成的timer产生的。

另外顺便问一下,貌似被信号终结时不一定都会产生core文件,只有非法内存访问才会产生么?

|
大多数系统上,以下信号会产生core文件, 其中又以SIGSEGV最常见。
SIGABRT
SIGBUS
SIGFPE
SIGILL
SIGQUIT
SIGSEGV
SIGSYS
SIGTRAP

|
           struct sigaction {
               void     (*sa_handler)(int);
               void     (*sa_sigaction)(int, siginfo_t *, void *);
               sigset_t   sa_mask;
               int        sa_flags;
               void     (*sa_restorer)(void);
           };

操作这个结构体有一点要注意, sa_handler和sigaction是在一个union里的,只有一个能赋值,原文如下:
On some architectures a union is involved: do not assign to both sa_handler and sa_sigaction.

使用这个结构体的时候先bzero清空整个结构体,然后赋值sa_handler即可,不需要赋值sa_mask,那是信号处理中的信号掩码, 通常是不需要额外屏蔽什么信号的, 默认就会屏蔽当前被处理的信号,原文如下:
       sa_mask specifies a mask of signals which should be blocked (i.e., added to the signal mask of the thread in which the signal  handler  is  invoked)  during
       execution of the signal handler.  In addition, the signal which triggered the handler will be blocked, unless the SA_NODEFER flag is used.

另外,

      int sigaction(int signum, const struct sigaction *act,
                     struct sigaction *oldact);

选择是哪个信号被什么函数处理是sigaction函数调用时选择的signum。

|
TCP的话肯定是不对的,字节流是按序发出的,你发一半数据又插另一半数据是定然不行的,也不是不能编码,只不过必须做好信号屏蔽,保证将未送出的数据缓冲起来并注册写事件,在信号处理函数中将要发送的数据继续追加到缓冲区,而不是穿插着write。 如果不这么编码,那就基本没办法实现你的设想了,给你个框架。

这是main loop:

sigprocmask //屏蔽所有信号
if (buffer空)
{
ret = write(fd, msg, len);
if (ret == -1) memcpy(buffer, msg, len);
else if (ret 

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












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


  • 站内导航:


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

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

    浙ICP备11055608号-3