基本概念
•又叫:软中断信号,是一种异步通信的IPC
•类似于硬件中断,可以将一个事件以信号形式通知给进程
•给一个指定进程发送一个信号
–信号只是告诉进程发生了什么事,并不传递数据
–进程表的表项中有一个软中断信号域,有信号发给该进程,对应位置位
–进程根据接收信号类型作相应的处理
信号的来源
•来自shell终端用户输入的各种信号:ctrl + C/D
•来自其它进程或者进程本身发送的信号
•来自系统内部的信号
–硬件异常:如SIGBUS表示总线错误、SIGSEGV表示段错误
–终端相关的信号
–软件事件相关的信号
进程对信号的处理方式
–缺省行为
•忽略信号:如SIGIGN、SIGCHLD
–SIGKILL/SIGSTOP比较特殊,不能忽略,所有进程都要在OS管控之下
•终止进程:SIGTERM、SIGINT、SIGHUP
•终止进程并内核转储:SIGBUS、SIGABRT、SIGQUIT
–捕获信号并执行信号注册的handler
•通过signal系统调用可以改变信号的处理行为,即注册新的handler
•当有信号到来时,信号的处理类似于中断程序
•暂停当前进程正在执行的代码、跳到注册的回调函数handler执行
•函数返回,回到当前进程捕获信号的地方继续执行
•若该信号没有注册回调函数,采用默认操作:忽略或终止进程
信号相关API
•typedef void (*sighandler_t)(int);
•sighandler_t signal (int signum, sigha