1,信号是软件中断,也就是指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。说白了就是程序执行中的中断,而非硬件cpu的中断。
2,信号处理及动作
1,忽略此信号,不推荐
2,捕捉信号
3,执行系统默认动作,(可以理解为跳到指定中断函数)、这里叫信号处理程序
3,signal函数
#include <signal.h>
void (*signal(int signo,void(*func)(int)))(int);
两个参数
第一个参数是signo
固定的信号名
比如SIGINT中断信号
SIGIO 异步I/O事件
SIGUSR1 用户定义信号,可用于应用程序
#include "apue.h"
static void sig_usr(int);
int main(void)
{
if(signal(SIGUSR1,sig_usr)==SIG_ERR)
printf("can't catch SIGUSR1");
if(signal(SIGUSR2,sig_usr)==SIG_ERR)
printf("can't catch SIGUSR2");
for(;;)
pause();
}
static void sig_usr(int signo)
{
if(signo == SIGUSR1)
printf("received SIGUSR1\n");
if(signo == SIGUSR2)
printf("received SIGUSR2\n");
else
printf("err");
}