signal函数
#include<signal.h>
typedef void(*sighandler_t)(int);
sighandler_t signal(int signum,sighandler_t handler);
功能:
注册信号处理函数(不可用于SIGKILL、SIGSTOP信号),即确定收到信号后处理函数的入口地址。
参数:
signum:信号编号
handler的取值:
忽略该信号:SIG_IGN
执行系统默认动作:SIG_DFL
自定义信号处理函数:信号处理函数名
返回值:
成功:返回函数地址,改地址为此信号上一次注册的信号处理函数的地址。
失败:返回SIG_ERR
使用忽略(SIG_IGN)该信号的方法来用signal这个函数的代码是:
代码:
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
int main()
{
if(signal(SIGINT,SIG_IGN) == SIG_ERR)
{
perror("fail to signal");
exit(1);
}
if(signal(SIGINT,SIG_IGN) == SIG_ERR)
{
perror("fail to signal");
exit(1);
}
if(signal(SIGINT,SIG_IGN) == SIG_ERR)
{
perror("fail to signal");
exit(1);
}
while(1)
{
printf("hello world\n");
sleep(1);
}
return 0;
}
运行结果:
注意: 在参数handler使用SIG_IGN值时,该信号的意思是忽略你键盘输入的信号,此时再按Ctrl+c就不会结束进程了,此时需要再打开一个终端端口
先用 ps ajx 来查看当前进程的pid
当找到该进程的pid后为3785,在使用kill命令来结束该进程
kill -9 3785