信号(1)

  • 信号是软中断,信号提供了一种异步处理事件的方法

  • 概念

    信号都被定义为正整数常量,在头文件signal.h中定义.
    不存在编号为0的信号

  • 信号产生

    1. 用户按某些终端键时,引发终端产生的信号。(ctrl+c产生SIGINT信号)
    2. 硬件异常产生信号(除数为0,无效的内存访问(产生SIGSEGV信号)等),这些条件有硬件检测到,并通知内核。然后内核为该条件发生时正在运行的进程产生适当的信号。
    3. 进程调用kill函数可以将任意信号发送给另一个进程或进程组。(接收信号的进程和发送信号的进程的所有者必须相同,或发送信号进程的所有者必须是超级用户)
    4. kill命令发送信号,常用于终止一个失去控制的后台进程
    5. 当检测到某种软件条件已经发生,并应将其通知有关进程时也产生信号。(如:SIGURG:在网络连接上传来带外的数据;SIGPIPE:(在管道的读进程终止后,一个进程写此管道);SIGALARM:(进程所设置的定时器已经超时))
  • 信号产生时的处理

    1. 忽略 大多数信号可使用这种方式处理,但有2种信号不允许忽略处理(SIGKILL和SIGSTOP)
    2. 执行系统默认动作 大多数信号的系统默认动作是终止进程
    3. 捕捉处理 SIGKILL和SIGSTOP不能被捕捉
  • 信号列举

信号说明描述默认动作
SIGABRT异常终止(abort)调用abort()函数,进程异常终止终止+core
SIGALRM定时器超时(alarm)alarm()函数或者setitimer()函数超时终止
SIGBUS硬件故障终止+core
SIGCANCEL线程库内部使用忽略(linux无此信号)
SIGCHLD子进程状态改变忽略
SIGCONT使暂停进程继续继续/忽略
SIGEMT硬件故障终止+core
SIGFPE算术异常终止+core
SIGHUP连接点断开终止
SIGILL非法硬件指令终止+core
SIGINT终端终端符终止
SIGIO异步IO终止/忽略
SIGIOT硬件故障终止+core
SIGKILL终止终止
SIGPIPE写至无读进程的管道终止
SIGPOLL可轮询事件(poll)终止
SIGPROF梗概时间超时(setitimer)终止
SIGPWR电源失效/重启终止/忽略
SIGQUIT终端退出符终止+core
SIGSEGV无效内存访问终止+core
SIGSTKFLT协处理器栈故障终止+core
SITSTOP停止停止进程
SIGSYS无效系统调用终止+core
SIGTERM终止终止
SIGTRAP硬件故障终止+core
SIGTSTP终端停止符停止进程
SIGTTIN后台读控制tty停止进程
SIGTTOU后台写向控制tty停止进程
SIGURG紧急情况(套接字)忽略
SIGUSR1用户定义信号终止
SIGUSR2用户定义信号终止
SIGVTALRM虚拟时间闹钟终止
SIGWINCH窗口大小改变忽略
SIGXCPU超过cpu限制(setrlimit)终止+core
SIGXFSZ超过文件长度限制(setrlimit)终止+core
SIGXRES超过资源限制忽略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值