Linux 信号随笔
POSIX標(biāo)準(zhǔn)定義了數(shù)據(jù)類型sigset_t來(lái)表示信號(hào)集。
每一個(gè)進(jìn)程都有一個(gè)信號(hào)屏蔽碼,它規(guī)定了當(dāng)前阻塞而不能遞送給該進(jìn)程的信號(hào)集。函數(shù)sigprocmask可以檢測(cè)或者更改進(jìn)程的信號(hào)屏蔽碼。
int sigprocmask(int how, const sigset_t * set, sigset_t * oldset);
如果oldset為非空指針,則該進(jìn)程之前的信號(hào)屏蔽碼通過(guò)oldset返回。
如果set為非空指針,則該函數(shù)將根據(jù)how來(lái)修改信號(hào)當(dāng)前的屏蔽碼,how的取值如下:
(1)SIG_BLOCK:將進(jìn)程新的信號(hào)屏蔽碼設(shè)置成為當(dāng)前信號(hào)屏蔽碼和set指向信號(hào)集的并集。
(2)SIG_UNBLOC:將進(jìn)程新的信號(hào)屏蔽碼設(shè)置成為當(dāng)前信號(hào)屏蔽碼中,刪除set所指向的信號(hào)集,即set指針包含著我們希望解除阻塞的信號(hào)。即使對(duì)當(dāng)前信號(hào)屏蔽碼中不存在的信號(hào)使用SIG_UNBLOCK也是合法的。
(3)SIG_SETMASK:將進(jìn)程新的信號(hào)屏蔽碼設(shè)置成為set所指向的。
?
2.? sigpending函數(shù)
int sigpengding(sigset_t *set);用來(lái)獲取當(dāng)前未決的信號(hào)集。
3. sigsuspend函數(shù)
int sigsuspend(const sigset_t * mask);將進(jìn)程屏蔽碼設(shè)置成為mask,然后與pause函數(shù)一樣,等待信號(hào)的發(fā)生并執(zhí)行完信號(hào)處理函數(shù)。信號(hào)處理函數(shù)執(zhí)行完后再把進(jìn)程的信號(hào)屏蔽碼設(shè)置為原來(lái)的屏蔽字,然后sigsuspend函數(shù)才返回。sigsuspeng保證改變進(jìn)程的屏蔽碼和將進(jìn)程掛起等待信號(hào)的操作是原子操作。
?
?
?
?
?
?
?
?
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/nathan-1988/archive/2012/06/25/2560872.html
總結(jié)
以上是生活随笔為你收集整理的Linux 信号随笔的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: word 2010 从第三页开始设置页码
- 下一篇: 【转】在python下使用包progre