#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <signal.h>
// 程序退出时的函数操作 void test(int n,struct siginfo *siginfo,void *myact) { printf("signal number:%d\n",n);/** 打印出信号值 **/ printf("siginfo signo:%d\n",siginfo->si_signo); /** siginfo结构里保存的信号值 **/ printf("siginfo errno:%d\n",siginfo->si_errno); /** 打印出错误代码 **/ printf("siginfo code:%d\n",siginfo->si_code); /** 打印出出错原因 **/ exit(0); } int main(void) { /** install signal use sigaction **/ struct sigaction act; sigemptyset(&act.sa_mask); /** 清空阻塞信号 **/ act.sa_flags=SA_SIGINFO; /** 设置SA_SIGINFO 表示传递附加信息到触发函数 **/ act.sa_sigaction=test; if(sigaction(SIGINT,&act,NULL) < 0) { printf("install signal error\n"); } while(1) { sleep(1); printf("wait for the signal\n"); } }