linux下如何屏蔽代码,linux c 怎么屏蔽信号 使用sigprocmask命令
SIGPROCMASK(2)???????????? Linux Programmer's Manual??????????? SIGPROCMASK(2)
NAME
sigprocmask - examine and change blocked signals
功能? sigprocmask - 測試和改變被屏蔽的信:號
?SYNOPSIS
頭文件??? #include
?函數(shù)????? int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
參數(shù):
?how:
??????? The behavior of the call is dependent on the value of how, as follows.
SIG_BLOCK
The set of blocked signals is the union of the current? set? and
the set argument.
SIG_UNBLOCK
The? signals? in set are removed from the current set of blocked
signals.? It is permissible to attempt to unblock a signal which
is not blocked.
SIG_SETMASK
The set of blocked signals is set to the argument set.
?*set:
??????? If set is NULL, then? the? signal? mask? is? unchanged? (i.e.,? how? is
ignored),? but? the? current? value? of the signal mask is nevertheless
returned in oldset (if it is not NULL).
?*oldset:
?
If? oldset is non-NULL, the previous value of the signal mask is stored
in oldset.
?返回值:成功返回0,失敗返回-1
?
?? 1 //屏蔽2號信號
2 #include
3 #include
4
5 int main(void){
6???? sigset_t set,oset;
7???? //將集合清空
8???? sigemptyset(&set);
9???? //將2信號添加到集合set里
10???? sigaddset(&set,SIGINT);
11???? sigprocmask(SIG_SETMASK,&set,&oset);
12 //??? sigprocmask(SIG_BLOCK,&set,&oset);
13???? while(1);
14???? return 0;
15 }
?前臺與后臺之間轉(zhuǎn)換過程
1)在shell下,啟動一個前臺進程。
2)用戶按下crtl+c,這個鍵盤輸入產(chǎn)生一個硬件中斷
3)如果此時cpu正在運行進程的用戶空間代碼,
需要切換到內(nèi)核空間,處理硬件中斷。
4)中斷驅(qū)動程序?qū)rtl+c 解釋成一個sigint信號,記
在該進程的PCB中。
5)從內(nèi)核返回到用戶空間的時候,先檢查
進程的PCB中是否有信號到達。如果有信號到達,
調(diào)用信號處理函數(shù)。
6)處理完畢后,繼續(xù)返回內(nèi)核,再次判斷是否有信號到達。
如有切換到第五步,沒有,返回進程的用戶態(tài),繼續(xù)執(zhí)行。
?
總結(jié)
以上是生活随笔為你收集整理的linux下如何屏蔽代码,linux c 怎么屏蔽信号 使用sigprocmask命令的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pxe linux自动安装系统,通过 P
- 下一篇: ue linux转dos格式,uestu