訊號基本操作之sigaciton

2021-08-07 15:24:17 字數 1675 閱讀 6647

stuct sigaction  

1. 阻塞,sigaction函式有阻塞的功能,比如sigint訊號來了,進入訊號處理函式,預設情況下,在訊號處理函式未完成之前,如果又來了乙個sigint訊號,其將被阻塞,只有訊號處理函式處理完畢,才會對後來的sigint再進行處理,同時後續無論來多少個sigint,僅處理乙個sigint,sigaction會對後續sigint進行排隊合併處理。

2. sa_mask,訊號遮蔽集,可以通過函式sigemptyset/sigaddset等來清空和增加需要遮蔽的訊號,上面**中,對訊號sigint處理時,如果來訊號sigquit,其將被遮蔽,但是如果在處理sigquit,來了sigint,則首先處理sigint,然後接著處理sigquit。

3.sa_flags如果取值為0,則表示預設行為。還可以取如下倆值,但是我沒覺得這倆值有啥用。

sa_nodefer

,如果設定來該標誌,則不進行當前處理訊號到阻塞

sa_resethand

,如果設定來該標誌,則處理完當前訊號後,將訊號處理函式設定為

sig_dfl行為

具體的函式申明的api就不多說了

直接上**來看問題:

#include #include #include void ouch(int sig)  

} int main()

return;

}

**執行的方式如下:

由兩種情況出現:

第一種:

^coh, got a signal 2

signal func 0

signal func 1

^\signal func 2

signal func 3

signal func 4

oh, got a signal 3

signal func 0

signal func 1

signal func 2

signal func 3

signal func 4

這裡可以發現,當按下ctrl+c  的時候,馬上ctrl+ \的時候,

由於之前採取了

sigaddset(&act.sa_mask, sigquit);
將ctrl+\遮蔽了,因此signint執行完之後,才執行sigquit訊號,

產生了上面的結果。

第二種情況:

^\oh, got a signal 3

signal func 0

signal func 1

^coh, got a signal 2

signal func 0

signal func 1

signal func 2

signal func 3

signal func 4

signal func 2

signal func 3

signal func 4

由於按下ctrl+\的sigquit訊號,沒有遮蔽訊號,馬上sigint的時候,

會中斷之前的**執行順序,出現了上面的結果。

《PHP 訊號 基本操作 配置》

一 php 訊號 sigint sigterm sigquit 退出fpm,在master收到退出訊號後將向所有的worker程序傳送退出訊號,然後master退出。sigusr1 sigusr2 重啟fpm 首先master也是會向所有的worker程序傳送退出訊號,然後master會呼叫exec...

精通Nginx基礎篇之基本操作和訊號控制

一 nginx基本操作 nginx基本操作命令 h 獲取幫助資訊 v 顯示nginx版本資訊 v 顯示nginx版本資訊和編譯器版本和配置引數 t 檢查nginx配置是否正確 一般我們修改配置後可以先檢查一下配置檔案是否正確 q 在配置測試中抑制非錯誤訊息 s signal 傳送訊號給nginx的m...

adb基本操作之monkey基本操作入門準備 1

本文是記錄在學習的過程中的一些學習筆記,主要是關於,在進行monkey測試之前時,adb的一些基本操作 前提 1.啟動cmd方法 法一 選單欄 搜尋 輸入cmd 單擊撥出cmd命令框 法二 win r快捷鍵啟動cmd命令框 一 cmd基本命令重點內容 adb version 檢視abd版本 adb ...