簡體   English   中英

信號隊列和信號掩碼

[英]signal queue and signal mask

《 Unix環境中的高級編程》一書說:

內核不對信號排隊,除非它們支持POSIX.1的實時擴展。

如果產生的阻塞信號不止一次(產生的阻塞信號是不同類型),則將其設置在信號掩碼上。 然后,與該過程的當前狀態相關的信號在其他信號之前被傳遞。

在這里,信號隊列和信號掩碼之間有區別嗎? 如果為每種不同的類型設置了信號掩碼,則表示內核知道正在等待什么信號(因此,我認為隊列和掩碼相同)。

而且,一次傳遞信號是什么情況? 當相同類型的信號被多次發送時,是否會發生這種情況?

而且,在大多數UNIX系統上,是否不對信號排隊意味着在清除掩碼上只能設置1個信號掩碼位? 那么,如果在該過程中阻塞了許多不同類型的信號,會發生什么呢? 沒有設置什么信號?

信號掩碼:當前被阻止的信號的集合稱為信號掩碼。 進程可以設置信號掩碼,以告知內核它不想接收某些特定信號。 因此,發送這些阻止的信號之一意味着不會調用相應的信號處理程序。 SIGKILLSIGSTOP信號不能被阻止。

信號隊列:每個進程都維護一個已接收但尚未處理的信號隊列。 已被遮罩屏蔽的信號將排隊。 進程可以通過sigwait()sigwaitinfo()和類似函數訪問此隊列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM