POSIX多线程笔记(5):信号

信号的概念

信号(signal)是向进程发送的软件通知,通知进程有事件发生。引发信号的事件发生时,信号就被生成(generate)了。进程根据信号采取行动时,信号就被传递(deliver)了。信号的寿命(lifetime)就是信号的生成和传递之间的时间间隔。已经生成但还未被传递的信号被称为挂起(pending)的信号。在信号生成和信号传递之间可能会有相当长的时间。传递信号时,进程必须在处理器上运行。
信号生成时所采取的动作取决于那个信号当前使用的信号处理程序和进程信号掩码(process signal mask)。信号掩码中包含一个当前被阻塞信号(blocked signal)的列表。阻塞一个信号很容易和忽略一个信号混淆起来。被阻塞的信号不会像被忽略的信号一样被丢弃。如果一个挂起信号被阻塞了,那么当进程解除了对那个信号的阻塞时,信号就会被传递出去。程序通过调用sigprocmask改变它的进程信号掩码来阻塞一个信号,而通过调用sigaction将信号处理程序设置为SIG_IGN来忽略一个信号。

信号的类型

每个信号都有一个以SIG开头的符号名。信号的名字都定义在signal.h中,任何一个使用了信号的C程序中都要包含这个文件。信号的名字都是某个大于0的小整数的宏定义。下表中描述了必须的POSIX信号,并列出了它们的默认行为。有两个信号SIGUSR1和SIGUSR2是提供给用户使用的,没有预先指定的用途。

信号 描述 默认行为
SIGABRT 进程放弃 与实现有关
SIGALRM 报警时钟 为正常终止
SIGBUS 访问了内存对象中的未定义部分 与实现有关
SIGCHLD 子进程被终止、停止或继续 忽略
SIGCONT 如果进程被停止了,本信号继续 继续
SIGFPE 算术计算中出现了被零除的错误 与实现有关
SIGHUP 在控制终端或进程上挂起或终止 非正常终止
SIGINT 交互终端提示信号(通常是Ctrl-C) 非正常终止
SIGKILL 终止(不能被捕获或忽略) 非正常终止
SIGPIPE 向一个没有读程序的管道写入 非正常终止
SIGQUIT 交互终端终止:信息转储(通常为Ctrl-L) 与实现有关
SIGSEGV 无效的内存引用 与实现有关
SIGSTOP 执行停止(不能被捕捉或忽略) 停止
SITTERM 终止 非正常终止
SIGTSTP 终端停止 停止
SIGTTIN 后台进程试图进行读操作 停止
SIGTTOU 后台进程试图进行写操作 停止
SIGURG 在套接字上有高带宽数据 忽略
SIGUSR1 用户定义的信号1 非正常终止
SIGUSR2 用户定义的信号2 非正常终止

对信号掩码和信号集进行操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值