在GNU linux下,查看系统信号可使用命令:trap -l 或 kill -l 另外,要查看当前的信号产生的按键的话,可使用命令stty -a查看,废话少说,直接上代码。
/*********************************************************************
* Function: Test simple signal
* Author : Samson
* Date : 11/29/2011
* Test platform:
* GNU Linux version 2.6.29.4
* gcc version 4.4.0 20090506 (Red Hat 4.4.0-4) (GCC)
* *******************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <signal.h>
void sighandler_t(int sig)
{
printf("signal SIGINT is received\n");
}
int
main()
{
int idx = 0;
signal(SIGINT, sighandler_t);
for(; idx < 100; idx++)
{
printf("my name is loop,haha\n");
}
printf("sleep(10) is start, Please ctrl+c in this time interval\n");
sleep(10);
printf("sleep(10) is end\n");
exit(0);
}
在运行程序后还没有显示sleep(10) is end之前按下ctrl+c组合键,即会有SIGINT信号产生,就会执行函数sighandler_t中的内容,执行结果如下:
my name is loop,haha
my name is loop,haha
sleep(10) is start, Please ctrl+c in this time interval
^Csignal SIGINT is received
sleep(10) is end
/*********************************************************************
* Function: Test simple signal
* Author : Samson
* Date : 11/29/2011
* Test platform:
* GNU Linux version 2.6.29.4
* gcc version 4.4.0 20090506 (Red Hat 4.4.0-4) (GCC)
* *******************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <signal.h>
void sighandler_t(int sig)
{
printf("signal SIGINT is received\n");
}
int
main()
{
int idx = 0;
signal(SIGINT, sighandler_t);
for(; idx < 100; idx++)
{
printf("my name is loop,haha\n");
}
printf("sleep(10) is start, Please ctrl+c in this time interval\n");
sleep(10);
printf("sleep(10) is end\n");
exit(0);
}
在运行程序后还没有显示sleep(10) is end之前按下ctrl+c组合键,即会有SIGINT信号产生,就会执行函数sighandler_t中的内容,执行结果如下:
my name is loop,haha
my name is loop,haha
sleep(10) is start, Please ctrl+c in this time interval
^Csignal SIGINT is received
sleep(10) is end