linux 中的sigaction函数的使用记录

sigaction 的函数原型:

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

函数用途: 用于注册指定的signum 的处理函数

signum: 定义在signal.h 中,如:SIGABRT、SIGUSR1、SIGPOLL等

act: 新设定的信号处理参数

           struct sigaction {
               void     (*sa_handler)(int);  //信号处理函数
               void     (*sa_sigaction)(int, siginfo_t *, void *); //更复杂的信号处理
               sigset_t   sa_mask; //设置在sa_handler处理过程中阻塞的信号mask
               int        sa_flags; //
               void     (*sa_restorer)(void); //已经废弃
           };

sa_flags 标志选项:可以通过 | 进行多选

        SA_RESTART: 让中断的系统调用,重新执行。 当出发信号处理函数时会中断read 、write 等系统调用函数,设置该标志位可以让系统重新执行

        SA_SIGINFO: 使用sa_sigaction 作为处理函数,有更详细的信号处理信息

        SA_NOCLDSTOP: 在子进程停止或继续时,主进程将不会收到子进程的启动或停止的信号

oldact: 旧的信号处理参数

当信号产生时,如果是单线程,将停止当前线程运行,信号处理函数执行完成后恢复线程执行。

如果是多线成,根据系统调度器确定在哪个线程上执行信号处理函数。如果一个线程存在阻塞的系统调用、或者使用pthread_sigmask 在当前线程上阻塞信号。则系统调度器会将信号处理分配给其它的线程执行。

另外SIGINT 、SIGTERM 如果注册了信号处理函数,则程序不会被自动终止

        

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值