Linux 訊號 模擬實現sleep

2021-07-30 20:19:39 字數 1997 閱讀 7727

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...