系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux信號機制

Linux信號機制解析(2)

時間:2015-07-27 14:19:34 作者:zhijie 來源:系統(tǒng)之家 1. 掃描二維碼隨時看資訊 2. 請使用手機瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20150727/53879.html 手機查看 評論

  2、信號阻塞、信號的未決

  sigset_t 是一種將信號類型以為位掩碼形式存在的數(shù)據(jù)類型(下文都稱之為信號集),他是多種信號的集合(可以保證容納所有的信號)。操作系統(tǒng)的PCB為每個進(jìn)程都維護(hù)了一個這樣的數(shù)據(jù)類型,并將其內(nèi)所有的信號阻塞,使他們不可以實時到達(dá)進(jìn)程。當(dāng)信號屏蔽解除時他們才被傳遞到進(jìn)程。在這之間的狀態(tài)通常被稱為未決(pending)。而在信號阻塞期間多次到來的信號,在信號屏蔽解除時只會被報告一次。

  對sigset_t 處理有一系列函數(shù),其中POSIX標(biāo)準(zhǔn)有5個

  int sigemptyset(sigset_t *set);

  int sigfillset(sigset_t *set);

  int sigaddset(sigset_t *set, int signum);

  int sigdelset(sigset_t *set, int signum);

  int sigismember(const sigset_t *set, int signum);

  這樣的函數(shù)基本上看參數(shù)就能知道怎么用,不在贅述。

  glibc中還實現(xiàn)了3個擴展的函數(shù):

  int sigisemptyset(sigset_t *set);

  int sigorset(sigset_t *dest, sigset_t *left, sigset_t *right);

  int sigandset(sigset_t *dest, sigset_t *left, sigset_t *right);

  sigprocmask()函數(shù)可以檢測和更改信號屏蔽集。

  每個進(jìn)程都有一個用來描述哪些信號遞送到進(jìn)程時將被阻塞的信號集,該信號集中的所有信號在遞送到進(jìn)程后都將被阻塞。

  int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

  how

  說明

  SIG_BLOCK

  將set中的信號與原有的取并集,并更新進(jìn)程的屏蔽字

  SIG_UNBLOCK

  解除原有的信號集中包含set中的信號,(set補集的交集)

  SIG_SETMASK

  將進(jìn)程的屏蔽字設(shè)置為set

  sigpending函數(shù)可以看到信號屏蔽期間那些信號來到過(不計次數(shù)的)。

  以上就是Linux的信號機制的解析了,當(dāng)然Linux信號機制是一個相對復(fù)雜的系統(tǒng),本文能夠給大家的是一個初步的了解。

標(biāo)簽 信號機制

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨特見解

立即評論

以上留言僅代表用戶個人觀點,不代表系統(tǒng)之家立場

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

掃碼關(guān)注
掃碼關(guān)注

掃碼關(guān)注 官方交流群 軟件收錄