1、產生訊號
產生訊號的3種方式:
1、呼叫系統函式:kill(); raise(); abort(();
2、軟體異常行為;
3、組合鍵:ctrl+c ctrl+d ctrl+\等;
處理訊號的3種方式:
1、忽略。
2、預設(很多情況下是終止)。
3、自定義(訊號捕捉)。
訊號在核心中的表示:
1、遞達:執行訊號的處理動作稱為訊號遞達(delivery)。
2、未決:訊號從產生到遞達之間的狀態,稱為訊號未決(pending)。
3、阻塞:程序可以選擇阻塞(block )某個訊號。被阻塞的訊號產生時將保持在未決狀態,直到程序解除對此訊號的阻塞才執行遞達的動作。
注意:阻塞和忽略是不同的,只要訊號被阻塞就不會遞達,而忽略是在遞達之後 可選的一種處理動作。
訊號集操作函式
模擬實現sleep
1、該程式有bug(無保護機制)
#include#include#includeint count = 0;
void handler(int sig)
int mysleep(int second)
int main()
return 0;
}
模擬實現sleep2、該程式無bug(有保護機制)
#include#include#includeint count = 0;
void handler(int sig)
{}int mysleep(int second)
int main()
return 0;
}
注:1. 呼叫sigprocmask(sig_block, &nmask, &omask);時遮蔽sigalrm。2. 呼叫sigsuspend(&unpmask);時解除對sigalrm的遮蔽,然後掛起等待待。
3. sigalrm遞達後suspend返回,自動恢復原來的遮蔽字,也就是再次遮蔽sigalrm。
4. 呼叫sigprocmask(sig_setmask, &oldmask, null);時再次解除對sigalrm的遮蔽。
linux 模擬實現sleep函式
功能 將程序掛起一段時間 函式原型 include unsigned int sleep unsigned int seconds n秒 來舉乙個很簡單的栗子 執行以上 後,輸出結果如下 每隔一秒列印一次,這就是sleep函式的作用。那麼如何自己模擬實現sleep呢?先介紹一些我們會用到的函式 作用...
模擬實現Spring IOC
通過在類上標註 registration 註冊進容器,injection從容器注入物件 容器類 public class springcontainer else bean.setbeanclass c mappropsmap new hashmap 處理注入屬性 field props c.get...
模擬實現strcmp
函式簡介 原型 int strcmp const char s1,const char s2 所在標頭檔案 string.h 功能 比較字串s1和s2。一般形式 strcmp 字串1,字串2 說明 當s1注意不是 1 當s1 s2時,返回值 0 當s1 s2時,返回正數 注意不是1 如下 int m...