国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++ Webserver從零開始:基礎(chǔ)知識(五)——信號

這篇具有很好參考價值的文章主要介紹了C++ Webserver從零開始:基礎(chǔ)知識(五)——信號。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Linux信號概述

Linux系統(tǒng)中,信號是一種通信的方式,其通常用作用戶,系統(tǒng)或進程給目標進程發(fā)送的信息。

信號的作用:通知目標進程某個狀態(tài)的改變或系統(tǒng)異常。

產(chǎn)生的條件:

  1. 對于終端程序:可以是用戶輸入的特殊的終端字符,比如ctrl+c是中斷信號
  2. 系統(tǒng)異常,如浮點異?;蚍欠▋?nèi)存訪問
  3. 系統(tǒng)狀態(tài)變化
  4. 用戶運行kill命令或程序調(diào)用kill函數(shù)

程序必須處理(忽略可以算作處理的一種)一些常見信號

發(fā)送信號

進程給其他進程發(fā)送信號使用kill函數(shù)

#include<sys/types.h>
#include<signal.h>
int kill(pid_t pid,int sig);
  • 作用:發(fā)送信號
  • 參數(shù)
    • pid:目標進程的id
    • sig:發(fā)送的信號
  • 返回值:
    • 成功:0
    • 失?。?1

信號處理方式

目標進程接收到信號后,需要一個接收函數(shù)來處理信號

#include<signal.h>
typedef void (*_sighandler_t)(int);

其中 sighandler_t為一個函數(shù)指針,可以用一個函數(shù)名給其賦值,int為這個函數(shù)的參數(shù),void表示這個函數(shù)返回值為NULL。

這是用戶自定義函數(shù),信號還有忽略和默認這兩種處理方式,其定義為

#include<bits/signum.h>
#define SIG_DFL((_sighandler_t)0)
#define SIG_ING((_sighandler_t)1)

SIG_DFL為默認處理方式,SIG_ING為忽略信號

中斷系統(tǒng)調(diào)用

程序在執(zhí)行處于阻塞狀態(tài)的系統(tǒng)調(diào)用時接收到信號,且該信號被我們設置了處理函數(shù),那么系統(tǒng)調(diào)用會被中斷。

如果接收到的信號的是暫停進程的信號(如SIGSTOP),即使我們沒為其設置處理函數(shù),它也可以中斷一些系統(tǒng)調(diào)用(如connect,epoll_wait)


信號函數(shù)

當我們接收到信號,就可以為信號設置一個處理函數(shù),Linux中有兩種信號處理函數(shù),分別是signal和sigaction

#include<signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
  • 作用:為信號設置處理函數(shù)
  • 參數(shù)
    • signum:信號的編號
    • handler:函數(shù)指針,表示接收此信號要執(zhí)行的函數(shù)的地址
      • SIG_IGN:忽略這個信號
      • SIG_DFL:按照默認動作執(zhí)行這個信號
      • 如果是一個函數(shù),則受到信號時去執(zhí)行這個函數(shù)
  • 返回值
    • 成功:函數(shù)指針,類型是sighandler_t
    • 失?。篠IG_ERR
#include<signal.h>
int sigaction(int sig, const struct sigaction *act, struct sigaciton *oact);
  • 作用:為信號設置處理函數(shù),或者獲取信號的處理函數(shù),或二者皆有可用來檢查和更改信號處理操作,可以支持可靠、實時信號的處理,并且支持信號傳遞信息
  • 參數(shù):
    • sig:信號的編號
    • act:信號動作結(jié)構(gòu)體,見下
struct sigaction
{
    void (*sa_handler)(int signum); /*簡單的信號處理函數(shù)指針*/
    void (*sa_sigaction)(int signum, siginfo_t *info, void *context); /*復雜的信號處理函數(shù)指針*/
    sigset_t sa_mask;               /*信號阻塞集*/
    int sa_flags;                   /*信號處理方式*/
};

網(wǎng)絡編程相關(guān)信號

SIGHUP:

當掛起進程的控制終端時,SIGHUP信號將被觸發(fā)。對于沒有控制終端的網(wǎng)絡后臺程序,SIGHUB信號可以用來強制服務器重讀配置程序。

SIGPIPE:

在默認情況下,往一個讀端關(guān)閉的管道(或socket連接)中寫數(shù)據(jù)將引發(fā)SIGPIPE信號。SIGPIPE信號的默認處理方式是結(jié)束進程。

所以為了避免因為往讀端關(guān)閉的管道寫數(shù)據(jù)導致進程結(jié)束,我們可以用send函數(shù)的MSG_NOSIGNAL標志來禁用寫操作觸發(fā)SIGPIPE信號文章來源地址http://www.zghlxwxcb.cn/news/detail-819127.html

到了這里,關(guān)于C++ Webserver從零開始:基礎(chǔ)知識(五)——信號的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 從零開始自制實現(xiàn)C++ High-Performance WebServer 全流程記錄

    這個 從零自制高性能多線程的WebServer 博客系列呢 剛開始我寫之初 其實也就是想記錄一下 一個linux后端開發(fā)者 以此作為 網(wǎng)絡編程的起點 以及多線程編程的起點的博客記錄而已 因為剛開始 對于很多后臺開發(fā)的前輩啊 所給出的后端學習的路啊 就比如寫一個WebServer 其實這個項

    2024年02月16日
    瀏覽(35)
  • 現(xiàn)代C++中的從頭開始深度學習【1/8】:基礎(chǔ)知識

    ????????提及機器學習框架與研究和工業(yè)的相關(guān)性?,F(xiàn)在很少有項目不使用Google TensorFlow或Meta PyTorch,在于它們的可擴展性和靈活性。 也就是說,花時間從頭開始編碼機器學習算法似乎違反直覺,即沒有任何基本框架。然而,事實并非如此。自己對算法進行編碼可以清晰而

    2024年02月13日
    瀏覽(22)
  • 信號完整性相關(guān)基礎(chǔ)知識

    信號完整性相關(guān)基礎(chǔ)知識

    一、GHz傳輸鏈路信號損耗的特征,高頻和低頻分量信號損耗問題 ? 1. 信號沿 FR4 傳播,兩種有功損耗 : 導體損耗和介質(zhì)損耗兩種損耗的高頻衰減大于低頻衰減。當信號傳播 4in 長時, 8GHz 以上高頻分量的功率衰減量大于 50 %,而對低頻分量的影響卻小得多。 ? 2.FR4 板上 4i

    2024年02月08日
    瀏覽(27)
  • 系統(tǒng)級基礎(chǔ)信號知識【Linux】

    系統(tǒng)級基礎(chǔ)信號知識【Linux】

    目錄 一,什么是信號? 進程面對信號常見的三種反應概述 二,產(chǎn)生信號 1.終端按鍵產(chǎn)生信號 signal 2. 進程異常產(chǎn)生信號 核心轉(zhuǎn)儲 3. 系統(tǒng)調(diào)用函數(shù)發(fā)送信號 kill raise abort 小結(jié): 4. 由軟件條件產(chǎn)生 alarm 5. 硬件異常產(chǎn)生信號 三,信號其他概念 1. 進程中儲存信號的內(nèi)核結(jié)構(gòu) 2. s

    2024年02月04日
    瀏覽(20)
  • 【001 基礎(chǔ)知識】自旋鎖、信號量

    Linux 內(nèi)核使用結(jié)構(gòu)體 spinlock_t 表示自旋鎖。 1. 定義: 自旋鎖 最多只能被一個內(nèi)核任務持有, 如果一個內(nèi)核任務試圖請求一個 已經(jīng)被持有的自旋鎖 ,那么這個任務就會一直進行 忙循環(huán)——旋轉(zhuǎn)——等待鎖重新可用。 2. 作用: 自旋鎖可以在任何時刻 防止多于一個的內(nèi)核任務

    2024年02月09日
    瀏覽(13)
  • 從1開始學習FPGA——FPGA的一些基礎(chǔ)知識(1)

    從1開始學習FPGA——FPGA的一些基礎(chǔ)知識(1)

    ? ? ? ? 這應該是筆者的第一篇CSDN博客了,之所以起名叫從1開始學習FPGA,原因在于筆者已經(jīng)有一定的FPGA基礎(chǔ),并且使用FPGA完成了一些項目。但是基本沒有系統(tǒng)成理論的學習FPGA,經(jīng)常是用到哪看到哪,導致很多之前用過的東西往往經(jīng)過一段時間就忘了。開始寫CSDN博客更多的

    2024年04月10日
    瀏覽(23)
  • 高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道

    高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道

    getX / getY : 返回相對于當前 View 左上角的 x 和 y 的坐標 getRawX / getRawY : 返回的是相對于手機屏幕左上角的 x 和 y 坐標。 TouchSlop TouchSlop 官方解釋就是系統(tǒng)所能識別的被認為是滑動的最小距離,通俗點說就是當手指在屏幕上滑動時,如果兩次滑動之間的距離小于這個常量,那么

    2024年04月26日
    瀏覽(25)
  • 語音信號處理基礎(chǔ)知識之頻譜、相位譜、幅度譜、功率譜及語譜圖

    語音信號處理基礎(chǔ)知識之頻譜、相位譜、幅度譜、功率譜及語譜圖

    一段音頻信號在時域上,可以用一個實數(shù)向量來表示。這個數(shù)組的大小=采樣率*音頻時長。舉個例子:一段采樣率為8000,長15.6s的音頻在matlab中表示為: 15.6x8000=124800大小的實數(shù)向量 下面是利用matlab讀取.wav文件和.pcm文件的兩種方法 從上圖可以看出,音頻信號在matlab中就是用一

    2024年02月05日
    瀏覽(58)
  • [C++]C++基礎(chǔ)知識概述

    [C++]C++基礎(chǔ)知識概述

    ? 目錄 C++基礎(chǔ)知識概述:: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1.什么是C++ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.C++發(fā)展史? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.C++ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4.命名空間 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    2023年04月16日
    瀏覽(27)
  • 【如何從零基礎(chǔ)小白開始學習C++詳細介紹】

    如果你想從零基礎(chǔ)開始學習C++并最終成為一個“大佬”級別的專家,你需要遵循一個階段性的學習計劃,并且不斷練習和深入研究,下面是學習方向的學習階段 學習編程基礎(chǔ) 了解編程的基本概念,如變量、數(shù)據(jù)類型、運算符、控制結(jié)構(gòu)(循環(huán)、條件判斷)、函數(shù)等。 安裝開

    2024年02月20日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包