信号屏蔽与处理

信号来源与处理有多种产生信号的方式:用户在终端中按下快捷键,shell将产生信号发送至前台进程组。如Ctrl-C触发SIGINT信号,Ctrl-Z产生SIGTSTP信号,Ctrl+\产生SIGQUIT信号。硬件异常产生信号,如除数为0产生SIGFPE信号,无效的内存引用产生SIGSEGV信号。程序调用kill系统调用发送信号给指定进程/进程组。相关软件条件发生,例如SIGURG,SIGPIPE,SIGALRM等。进程可告知内核采取三种动作之一处理到来的信号:忽略此信号。内核将不会通知进
摘要由CSDN通过智能技术生成

信号来源与处理

有多种产生信号的方式:

  1. 用户在终端中按下快捷键,shell将产生信号发送至前台进程组。如Ctrl-C触发SIGINT信号,Ctrl-Z产生SIGTSTP信号,Ctrl+\产生SIGQUIT信号。
  2. 硬件异常产生信号,如除数为0产生SIGFPE信号,无效的内存引用产生SIGSEGV信号。
  3. 程序调用kill系统调用发送信号给指定进程/进程组。
  4. 相关软件条件发生,例如SIGURG,SIGPIPE,SIGALRM等。

进程可告知内核采取三种动作之一处理到来的信号:

  1. 忽略此信号。内核将不会通知进程此信号的产生,应用程序将无法获得与此信号有关的信息。

  2. 捕获信号。进程需要制定一个用户函数,它将在信号到来时被调用。

  3. 执行系统默认动作。有内核来决定忽略信号还是终止/停止进程。

    SIGKILL和SIGSTOP不能被忽略或捕获。

屏蔽信号字

我们可以使用sigprocmask来为当前进程设置一个屏蔽信号字,那么此信号的传送将被阻塞,也就是说,如果内核为进程产生了一个被阻塞的信号,而且对该信号的动作是系统默认动作或捕获该信号,则内核将此信号保持为未决状态,直到该进程对此信号解除了阻塞,或者将对此信号的动作更改为忽略。

内核只有在递送该被阻塞的信号给进程时(而不是在产生此信号时)才决定对它的处理方式。所以进程在信号被递送前(即已经产生但因被阻塞而处于未决状态)仍可改变对该信号的动作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值