Board logo

标题: Linux信号处理机制(3) [打印本页]

作者: yuyang911220    时间: 2014-10-28 21:03     标题: Linux信号处理机制(3)

参数结构sigaction定义如下          struct sigaction
          {
          void (*sa_handler) (int);
          sigset_t sa_mask;
          int sa_flags;
          void (*sa_restorer) (void);
          }
          sa_handler此参数和signal()的参数handler相同,代表新的信号处理函数,其他意义请参考signal()。
          sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号搁置。
          sa_restorer 此参数没有使用。
          sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。
          OR 运算(|)组合
          A_NOCLDSTOP : 如果参数signum为SIGCHLD,则当子进程暂停时并不会通知父进程
          SA_ONESHOT/SA_RESETHAND:当调用新的信号处理函数前,将此信号处理方式改为系统预设的方式。
          SA_RESTART:被信号中断的系统调用会自行重启
          SA_NOMASK/SA_NODEFER:在处理此信号未结束前不理会此信号的再次到来。
          int sigemptyset(sigset_t *set);
          int sigfillset(sigset_t *set);
          int sigaddset(sigset_t *set,int signo);
          int sigdelset(sigset_t *set,int signo);
          int sigismember(sigset_t *set,int signo);
          int sigprocmask(int how,const sigset_t *set,sigset_t *oset);
          sigemptyset函数初始化信号集合set,将set设置为空.sigfillset也初始化信号集合,只是将信号集合设置为所有信号的集合.sigaddset将信号signo加入到信号集合之中,sigdelset将信号从信号集合中删除.sigismember查询信号是否在信号集合之中.
          sigprocmask是最为关键的一个函数.在使用之前要先设置好信号集合set.这个函数的作用是将指定的信号集合set加入到进程的信号阻塞集合之中去,如果提供了oset那么当前的进程信号阻塞集合将会保存在oset里面.参数how决定函数的操作方式.
          SIG_BLOCK:增加一个信号集合到当前进程的阻塞集合之中.
          SIG_UNBLOCK:从当前的阻塞集合之中删除一个信号集合.
          SIG_SETMASK:将当前的信号集合设置为信号阻塞集合.




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0