熱搜:win11繞過硬件限制安裝 一鍵重裝Win10系統(tǒng) 最干凈的u盤啟動盤 真正純凈版的win7系統(tǒng)
時間: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),本文能夠給大家的是一個初步的了解。
發(fā)表評論
共0條
評論就這些咯,讓大家也知道你的獨特見解
立即評論以上留言僅代表用戶個人觀點,不代表系統(tǒng)之家立場