轉載from:https://blog.csdn.net/engineer_james/article/details/83867809
在https://blog.csdn.net/engineer_james/article/details/83867466 寫一個android程序背景的過程
但是我們用CPP C 開發避免不了 配置設定記憶體或者 指針,如果在linux 程序跑的時候,出現死了或者退出導緻中斷,但是資源沒有正常釋放,造成資源浪費,是以需要用signal 處理
signal是linux系統的對所有動作的捕捉,然後進行處理
// #define SIGILL 4
信号 取值 預設動作 含義(發出信号的原因)
SIGHUP 1 Term 終端的挂斷或程序死亡
SIGINT 2 Term 來自鍵盤的中斷信号
SIGQUIT 3 Core 來自鍵盤的離開信号
SIGILL 4 Core 非法指令
SIGABRT 6 Core 來自abort的異常信号
SIGFPE 8 Core 浮點例外
SIGKILL 9 Term 殺死
SIGSEGV 11 Core 段非法錯誤(記憶體引用無效)
SIGPIPE 13 Term 管道損壞:向一個沒有讀程序的管道寫資料
SIGALRM 14 Term 來自alarm的計時器到時信号
SIGTERM 15 Term 終止
SIGUSR1 30,10,16 Term 使用者自定義信号1
SIGUSR2 31,12,17 Term 使用者自定義信号2
SIGCHLD 20,17,18 Ign 子程序停止或終止
SIGCONT 19,18,25 Cont 如果停止,繼續執行
SIGSTOP 17,19,23 Stop 非來自終端的停止信号
SIGTSTP 18,20,24 Stop 來自終端的停止信号
SIGTTIN 21,21,26 Stop 背景程序讀終端
SIGTTOU 22,22,27 Stop 背景程序寫終端
SIGBUS 10,7,10 Core 總線錯誤(記憶體通路錯誤)
SIGPOLL Term Pollable事件發生(Sys V),與SIGIO同義
SIGPROF 27,27,29 Term 統計分布圖用計時器到時
SIGSYS 12,-,12 Core 非法系統調用(SVr4)
SIGTRAP 5 Core 跟蹤/斷點自陷
SIGURG 16,23,21 Ign socket緊急信号(4.2BSD)
SIGVTALRM 26,26,28 Term 虛拟計時器到時(4.2BSD)
SIGXCPU 24,24,30 Core 超過CPU時限(4.2BSD)
SIGXFSZ 25,25,31 Core 超過檔案長度限制(4.2BSD)
SIGIOT 6 Core IOT自陷,與SIGABRT同義
SIGEMT 7,-,7 Term
SIGSTKFLT -,16,- Term 協處理器堆棧錯誤(不使用)
SIGIO 23,29,22 Term 描述符上可以進行I/O操作
SIGCLD -,-,18 Ign 與SIGCHLD同義
SIGPWR 29,30,19 Term 電力故障(System V)
SIGINFO 29,-,- 與SIGPWR同義
SIGLOST -,-,- Term 檔案鎖丢失
SIGWINCH 28,28,20 Ign 視窗大小改變(4.3BSD, Sun)
SIGUNUSED -,31,- Term 未使用信号(will be SIGSYS)
##signal 使用
signal函數的原型
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
參數1:signum 表示上面的動作編号
參數2:捕捉到信号需要的函數位址
如果是 SIG_IGN表示 屏蔽該信号 而設定 SIG_DFL 表示恢複預設行為 就是繼續捕捉
是以在初始化的時候,設定需要捕捉的信号
signal(SIGINT, signal_handler);//ctrl+c signal_handler捕捉信号需要處理的函數
void signal_handler(int param){
signal(SIGINT, SIG_IGN);//忽略後面的信号捕捉
//釋放資源
exit(0);
}
用起來很簡單,但是對資源釋放很有作用