sigprocmask 阻塞程序

2021-06-22 21:06:27 字數 2008 閱讀 9498

1、有時候不希望在接到訊號時就立即停止當前執行,去處理訊號,同時也不希望忽略該訊號,而是延時一段時間去呼叫訊號處理函式。這種情況是通過阻塞訊號實現的。

2、訊號阻塞和忽略訊號的區別。

阻塞的概念和忽略訊號是不同的。作業系統在訊號被程序解除阻塞之前不會講訊號傳遞出去,被阻塞的訊號也不會影響程序的行為,訊號只是暫時被阻止傳遞。當程序忽略乙個訊號時,訊號會被傳遞出去但程序會將訊號丟棄。

3、訊號阻塞系統呼叫,它們的都起到阻塞的作用,它們不是協作使用的。

[cpp]view plain

copy

print?

#include 

intsigprocmask(ubt how,

const

sigset_t*set,sigset_t *oldset);  

intsigsuspend(

const

sigset_t*sigmask);  

sigprocmask設定對訊號遮蔽集內的訊號的處理方式(阻塞或不阻塞)。

引數:

how:用於指定訊號修改的方式,可能選擇有三種

sig_block//將set所指向的訊號集中包含的訊號加到當前的訊號掩碼中。即訊號掩碼和set訊號集進行或操作。

sig_unblock//將set所指向的訊號集中包含的訊號從當前的訊號掩碼中刪除。即訊號掩碼和set進行與操作。

sig_setmask //將set的值設定為新的程序訊號掩碼。即set對訊號掩碼進行了賦值操作。

set:為指向訊號集的指標,在此專指新設的訊號集,如果僅想讀取現在的遮蔽值,可將其置為null。

oldset:也是指向訊號集的指標,在此存放原來的訊號集。可用來檢測訊號掩碼中存在什麼訊號。

返回說明:

成功執行時,返回0。失敗返回-1,errno被設為einval。

sigprocmask示例(演示新增訊號掩碼):

[cpp]view plain

copy

print?

#include 

#include 

void

checkset();  

void

main()  

void

checkset()  

if(sigismember(&set,sigint))  

printf("sigint\n"

);  

if(sigismember(&set,sigtstp))  

printf("sigtstp\n"

);  

if(sigismember(&set,sigterm))  

printf("sigterm\n"

);  

printf("checksetend\n"

);  

}  

sigprocmask示例(演示添某部分**不被訊號打攪):

[cpp]view plain

copy

print?

#include 

#include 

void

checkset();  

void

func();  

void

main()  

void

checkset()  

if(sigismember(&set,sigint))  

printf("sigint\n"

);  

if(sigismember(&set,sigtstp))  

printf("sigtstp\n"

);  

if(sigismember(&set,sigterm))  

printf("sigterm\n"

);  

printf("checksetend\n"

);  

}  void

func()    

sigprocmask阻塞訊號

有時候不希望在接到訊號時就立即停止當前執行,去處理訊號,同時也不希望忽略該訊號,而是延時一段時間去呼叫訊號處理函式 1.訊號阻塞和忽略訊號的區別 作業系統在訊號被程序解除阻塞之前不會將訊號傳遞出去,被阻塞的訊號也不會影響程序的行為,訊號只是暫時被阻止傳遞。當程序忽略乙個訊號時,訊號會被傳遞出去但程序...

python程序阻塞

from urllib import request import os from multiprocessing import process def a print 程序a def b print 程序b if name main 結束了最後執行 p1 process target a p2 p...

檢視阻塞的程序和被阻塞的程序

檢視阻塞的程序和被阻塞的程序 select from master.sysprocesses where db name dbid golddb and spid spid and dbid 0 and blocked 0 select request session id spid,object ...