Linux下訊號詳解
阿新 • • 發佈:2019-02-17
訊號:當我們按下Ctrl+'C' /"D"/"\"/"Z"等組合鍵時,程序為什麼會停止下來,實際上是我們給程序發出了訊號,例如,我們在除錯的過程中,程式異常終止時,常常會受到SIGSEGV訊號,那麼核心是如何來管理這些訊號的呢?
當有訊號產生時,程序PCB會維護兩個訊號集,未決訊號集和阻塞訊號集。會將產生的訊號對應的整數位設定為1,然後通過與BLOCK訊號集的具體位作比較,當發現該訊號位
阻塞時,這時訊號處於未決狀態,否則,會執行系統相關的訊號處理動作。
#include <signal.h> #include <stdio.h> void print_sigset(sigset_t* s) { int i = 0; for(i = 1;i<=32;i++) { if(1 == sigismember(s,i)) putchar('1'); else putchar('0'); } } int main() { sigset_t set; sigemptyset(&set); sigaddset(&set,SIGINT); sigprocmask(SIG_SETMASK,&set,NULL); while(1) { if(0 == sigpending(&set)) print_sigset(&set); } return 0; }