LINUX信号捕捉函数
1.一些常用的信号
有哪些信号
-------------------------------------------
信号名称 说明
-------------------------------------------
SIGABORT 进程异常终止
SIGALRM 超时告警
SIGFPE 浮点运算异常
SIGHUP 连接挂断
SIGILL 非法指令
SIGINT 终端中断 (Ctrl+C将产生该信号)
SIGKILL *终止进程
SIGPIPE 向没有读进程的管道写数据
SIGQUIT 终端退出(Ctrl+\将产生该信号)
SIGSEGV 无效内存段访问
SIGTERM 终止
SIGUSR1 *用户自定义信号1
SIGUSR2 *用户自定义信号2
-------------------------------------->以上信号如果不被捕获,则进程接受到后都会终止!
SIGCHLD 子进程已停止或退出
SIGCONT *让暂停的进程继续执行
SIGSTOP *停止执行(即“暂停")
SIGTSTP 中断挂起
SIGTTIN 后台进程尝试读操作
SIGTTOU 后台进程尝试写
2.恢复信号的默认行为
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void myhandle(int sig)
{
static int cnt = 0;
printf("Catch a signal : %d\n", sig);
signal(SIGINT, SIG_DFL); //等同于signal(sig, SIG_DFL);
}
int main(void)
{
signal(SIGINT, myhandle);
while (1) {
sleep(1);
}
return 0;
}
注:在shell终端,使用kill或killall命令产生信号
3.使用signal
用法:man 2 signal
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
注:signal的返回类型,和它的第二个参数,都是函数指针类型
signal的参数2可去以下特殊值:
SIG_IGN 忽略信号
SIG_DFL 恢复默认行为
版权声明:本文为weixin_53439312原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。