更详细的用法说明可以看:https://www.cnblogs.com/lidabo/p/4581026.html
信号是在软件层次上对中断的一种模拟,所以通常把它称为是软中断
信号和中断的区别
信号与中断的相似点:
(1)采用了相同的异步通信方式;
(2)当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序;
(3)都在处理完毕后返回到原来的断点;
(4)对信号或中断都可进行屏蔽。
信号与中断的区别:
(1)中断有优先级,而信号没有优先级,所有的信号都是平等的;
(2)信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运行;
(3)中断响应是及时的,而信号响应通常都有较大的时间延迟。
SIGABRT 进程停止运行 6
SIGINT 终端中断 2
SIGKILL 停止进程(此信号不能被忽略或捕获)
SIGQUIT 终端退出 3
handler这个函数必须有一个int类型的参数(即接收到的信号代码),它本身的类型是void,
handler也可以是下面两个特殊值:
SIG_IGN 屏蔽该信号
SIG_DFL 恢复默认行为/*
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
*/
signal的函数原型,这里要注意它的返回值的类型,
它的参数,第一个是信号的编号,也就是具体是哪一个信号,固定的写法,没什么好说的,
第二个参数handler,
1, 赋值SIG_IGN代表忽略信号,
2,或者你可以自己写个信号处理函数,传给它地址,
3,如果你需要修改上面的设置,可以恢复默认SIG_DFL ,
下面是一个自己写的信号处理函数,
说两点,
1,默认自带一个int类型参数,//开始还在找,这个num哪里传进去的,
2,返回类型是void,
-
void handler(int num)
-
{
-
printf(
“recv num:%d \n”, num);
-
if (num == SIGQUIT)
-
{
-
//exit(0);
-
}
-
}
下面是signal返回值的应用场景,
-
if (signal(SIGINT, handler) == SIG_ERR)
-
{
-
perror(
"signal err");
//errno
-
exit(
0);
-
}
这是它的返回 typedef void (*sighandler_t)(int);
下面是对 typedef void (*sighandler_t)(int) 的解释:
信号是在软件层次上对中断的一种模拟,所以通常把它称为是软中断
信号和中断的区别
信号与中断的相似点:
(1)采用了相同的异步通信方式;
(2)当检测出有信号或中断请求时,都暂停正在执行的程序而转去执行相应的处理程序;
(3)都在处理完毕后返回到原来的断点;
(4)对信号或中断都可进行屏蔽。
信号与中断的区别:
(1)中断有优先级,而信号没有优先级,所有的信号都是平等的;
(2)信号处理程序是在用户态下运行的,而中断处理程序是在核心态下运行;
(3)中断响应是及时的,而信号响应通常都有较大的时间延迟。
SIGABRT 进程停止运行 6
SIGINT 终端中断 2
SIGKILL 停止进程(此信号不能被忽略或捕获)
SIGQUIT 终端退出 3
handler这个函数必须有一个int类型的参数(即接收到的信号代码),它本身的类型是void,
handler也可以是下面两个特殊值:
SIG_IGN 屏蔽该信号
SIG_DFL 恢复默认行为/*
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
*/
signal的函数原型,这里要注意它的返回值的类型,
它的参数,第一个是信号的编号,也就是具体是哪一个信号,固定的写法,没什么好说的,
第二个参数handler,
1, 赋值SIG_IGN代表忽略信号,
2,或者你可以自己写个信号处理函数,传给它地址,
3,如果你需要修改上面的设置,可以恢复默认SIG_DFL ,
下面是一个自己写的信号处理函数,
说两点,
1,默认自带一个int类型参数,//开始还在找,这个num哪里传进去的,
2,返回类型是void,
-
void handler(int num)
-
{
-
printf(
“recv num:%d \n”, num);
-
if (num == SIGQUIT)
-
{
-
//exit(0);
-
}
-
}
下面是signal返回值的应用场景,
-
if (signal(SIGINT, handler) == SIG_ERR)
-
{
-
perror(
"signal err");
//errno
-
exit(
0);
-
}
这是它的返回 typedef void (*sighandler_t)(int);
下面是对 typedef void (*sighandler_t)(int) 的解释: