- // 程序退出時的函數操作
- 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");
- }
- }
///////////////////////////////////////////////////
if (atexit(&cleanup)) //atexit現在不鼓勵用了,常用來做程序退出的后處理工作 { fprintf(stderr, "cannot set exit function/n"); return EXIT_FAILURE; } signal (SIGINT, &catch_int); signal (SIGTERM, &catch_term); #ifdef __WIN32__ signal (SIGBREAK, &catch_break); #else signal (SIGHUP, &catch_hup); signal (SIGQUIT, &catch_quit); #endif