1、信号的种类
命令:kill -l (62个)
2、信号的来源:软件、硬件
SIGINT(2号):Ctrl + C
Ctrl+\(3号) :SIGQUIT
SIGINT的默认处理动作是终止进程,而SIGQUIT的默认处理动作是终止进程并且Cor Dump
3、信号的产生
kill函数(给指定进程发信号)
int kill(pid_t pid, int sig);raise函数(自己给自己发信号)
int raise(int sig);
4、信号的处理
进程接收到一个信号后有三种处理方式:
1)默认处理,通常是强制结束
2)忽略处理
9号(SIGKILL)和19号(SIGSTOP即ctrl+z)这两个信号不可忽略
3)自定义处理(软件中断(异步)有就处理)
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>//函数的参数可以为数据,也可以为操作(函数指针)
void signal_handler(int signum) //回调函数
{
if(signum== SIGINT)
printf("hahahah\n");
else if(signum== SIGUSR2)
printf("你好,cmz\n"); //满足条件时自动调用,不需要显示调用
}
void main()
{
signal(SIGUSR1,SIG_IGN);//忽略SIGUSR1信号
signal(3,SIG_IGN);//忽略SIGQUIT信号,参数1可为信号编号,通过kill -l查出
// typedef void (*sighandler_t)(int); 指定函数结构
// sighandler_t signal(int signum, sighandler_t handler);
//信号编号 函数名
signal(SIGINT,signal_handler);//即Ctrl+C信号//为信号注册处理函数
signal(SIGUSR2,signal_handler);//多个信号可以共用一个处理函数
while(1) //函数通过传过来的参数判断处理哪个信号
{ //想用几个信号就注册几个singnal
printf("hello\n");
sleep(1);
}
}