#include <stdio.h> #include <signal.h> #include <unistd.h> void fun_ctrl_c(); int main(void) { (void) signal(SIGINT, fun_ctrl_c);//如果按了ctrl+c键,调用fun_ctrl_c函数 printf("主程序:程序进入一个无限循环!/n"); while(1) { printf("这是一个无限循环(要退出请按Ctrl+C)/n"); sleep(3); } exit(0); } void fun_ctrl_c() { printf("/t你按了Ctrl+c键/n"); printf("/t信号处理函数:有什么要处理,在处理函数中编程/n"); printf("/t此例不处理,重新恢复SIGINT信号的系统默认处理/n"); (void) signal(SIGINT, SIG_DFL);//重新恢复SIGINT信号的系统默认处理 /** * 设置信号处理方式 * void (*signal(int signum,void(* handler)(int)))(int); * signal()会依参数signum指定的信号编号来设置该信号的处理函数.当指定的信号到达时会 * 就会跳转到参数handler指定的函数执行。如果参数handler不是函数指针,则必须是: * SIG_IGN 忽略参数signum指定的信号 * SIG_DFL 将参数signum指定的信号重设为核心预设的信号处理方式 * * 返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1) */ }