Linux信号总结

SIGTSTP与SIGSTOP都是使进程暂停(都使用SIGCONT让进程重新激活)。唯一的区别是SIGSTOP不可以捕获。
捕捉SIGTSTP后一般处理如下:
1)处理完额外的事
2)恢复默认处理
3)发送SIGTSTP信号给自己(使进程进入suspend状态)

SIGTTIN 当一个后台进程组进程试图读其控制终端时,终端驱动程序产生此信号。在下列例外情形下不产生此信号,此时读操作返回出错,errno设置为EIO: ( a )读进程忽略或阻塞此信号,或( b )读进程所属的进程组是孤儿进程组。

SIGQUIT 当用户在终端上按退出键(一般采用 C t r l - \)时,产生此信号,并送至前台进程组中的所有进程。此信号不仅终止前台进程组(如 S I G I N T所做的那样),同时产生一个c o r e文件。

在父进程终止后,进程组成为孤儿进程组,POSIX.1要求向新孤儿进程组中处于停止状态的每一个进程发送挂断信号(SIGHUP),接着又向其发送继续信号(SIGCONT)。但在这里,这是一个孤儿进程组,如果内核用此信号停止它,则此进程组中的进程就再也不会继续。 POSIX.1规定,read返回出错,其errno设置为EIO.

很多条件可以产生一个信号:
• 当用户按某些终端键时,产生信号。在终端上按D E L E T E键通常产生中断信号( S I G I N T)。这是停止一个已失去控制程序的方法。
•硬件异常产生信号:除数为0、无效的存储访问等等。这些条件通常由硬件检测到,并将其通知内核。然后内核为该条件发生时正在运行的进程产生适当的信号。例如,对执行一个无效存储访问的进程产生一个S I G S E G V。
• 进程用k i l l ( 2 )函数可将信号发送给另一个进程或进程组。自然,有些限制:接收信号进程和发送信号进程的所有者必须相同,或发送信号进程的所有者必须是超级用户。
• 用户可用k i l l ( 1 )命令将信号发送给其他进程。此命令只是 k i l l函数的接口。常用此命令终止一个失控的后台进程。
• 当检测到某种软件条件已经发生,并将其通知有关进程时也产生信号。这里并不是指硬件产生条件(如被 0除),而是软件条件。例如 S I G U R G (在网络连接上传来非规定波特率的数据)、 S I G P I P E (在管道的读进程已终止后一个进程写此管道 ),以及S I G A L R M (进程所设置的闹钟时间已经超时)。

P O S I X . 1将信号编号0定义为空信号。如果s i g n o参数是0,则k i l l仍执行正常的错误检查,但不发送信号。

当调用一个信号处理程序时,被捕捉到的信号加到进程的当前信号屏蔽字。当从信号处理程序返回时,原来的屏蔽字被恢复。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值