typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
功能:捕捉一个指定的信号,并作相应的处理
参数:signum :要捕捉的信号
handler:SIG_IGN //忽略
SIG_DFL //执行默认操作
fun //执行相应的函数代码
返回:失败返回SIG_ERR
注意:1、SIGKILL和SIGSTOP不能被捕捉
2、signal是非阻塞函数,不会一直等待指定信号的产生
3、信号的查看使用命令 kill -1
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void fun(int sig)
{
if(sig == SIGINT)
{
puts("catch SIGINT");
}
}
int main(int argc, const char *argv[])
{
if(signal(SIGINT, fun) == SIG_ERR) //SIGINT信号的物理按键为ctrl+c
{ //当捕捉到ctrl+c后执行fun函数
perror("signal error");
exit(1);
}
if(signal(SIGTSTP, SIG_IGN) == SIG_ERR)
{ //SIGTSTP信号的物理按键为ctrl+z
perror("signal error"); //当捕捉到ctrl+z后会忽略此信号
exit(1);
}
if(signal(SIGQUIT, SIG_DFL) == SIG_ERR)
{ //当捕捉到ctrl+\后会执行默认操作结束程序
perror("signal error"); //SIGQUIT信号的物理按键为ctrl+\
exit(1);
}
puts("signal"); //signal是非阻塞函数,所以puts会立即打印输出
while(1);
return 0;
}