色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux操作系統編程講解:信號捕捉

如意 ? 來源:良許Linux ? 作者:良許 ? 2020-10-19 15:10 ? 次閱讀

前面我們學習了信號產生的幾種方式,而對于信號的處理有如下幾種方式:

默認處理方式;

忽略;

捕捉。

信號的捕捉,說白了就是抓到一個信號后,執行我們指定的函數,或者執行我們指定的動作。下面詳細介紹兩個信號捕捉操作參數:signal和sigaction。

##signal函數

函數原型:

sighandler_t signal(int signum, sighandler_t handler);

其中,sighandler定義是這樣的:typedef void (*sighandler_t)(int);

函數作用:注冊一個信號捕捉函數,也就是說,收到了某個信號,就執行它所注冊的回調函數。

函數參數:

signum:信號編號,盡量用宏來寫,而別用數字,這樣更適合跨平臺;

handler:注冊的回調函數;

函數缺陷:

由于歷史原因,該函數在不同版本的Unix和Linux系統中可能起到的效果不一樣,所以跨平臺性不佳,盡量避免使用它,取而代之使用通用性更好的sigaction函數。

Linux操作系統編程講解:信號捕捉

##sigaction函數

函數原型:

int sigaction(int signum, const struct sigaction act, struct sigaction oldact);

函數作用:與signal函數類似,用來注冊一個信號捕捉函數;

返回值:

成功:0;失敗:-1,并設置errno;

參數:

signum:信號編號,盡量用宏來寫,而別用數字,這樣更適合跨平臺;

act:傳入參數,新的信號捕捉方式;

oldact:傳出參數,舊的信號捕捉方式

這里特別要注意參數中struct sigaction結構體,這也是這個函數的難點所在,下面詳細說明:

struct sigaction結構體

原型:

Linux操作系統編程講解:信號捕捉

這個結構體成員很多,又很多是回調函數的形式,令人望而生畏。但實際上,需要掌握的只有三個。

首先,sa_restorer和sa_sigaction這兩個成員一個已經被棄用了,另一個很少使用,所以我們暫且不管它們,重點掌握剩下的三個。

(1) sa_handler:指定信號捕捉后的處理函數,即注冊回調函數。該成員也可以賦值為SIG_IGN,表示忽略該信號,也可注冊為SIG_DFL,表示執行信號的默認動作。

(2) sa_mask:臨時阻塞信號集(或信號屏蔽字)先來看這樣一個情景:

某個信號已經注冊了回調函數,當內核傳遞這個信號過來時,會先經過一個阻塞信號集,先阻塞掉部分信號。再去執行對應的回調函數。如下圖示:

Linux操作系統編程講解:信號捕捉

假如說,這個回調函數回調執行的時間比較長,比如2秒,在這2秒里,又有其它的信號過來,那進程是暫停當前回調函數,去響應新的信號,還是不管新來的信號,先把當前回調函數處理完再說?

正確的做法是,在執行回調函數期間,使用sa_mask臨時的去替代進程的阻塞信號集,保證回調函數安心的執行完畢,再解除替代。注意:這個過程僅僅發生在回調函數執行期間,是臨時性的設置。

(3) sa_flags:通常設置為0,表示使用默認屬性。

再來看另外一個場景:

比如進程對SIGQUIT注冊了回調函數,當回調函數在執行期間,又來了SIGQUIT函數,這時,進程是響應還是不響應該信號?這就是sa_flags的一個作用,當其設置為0時,表示使用默認屬性,也就是先不響應該信號,而是執行完回調函數再處理此信號。

另外,阻塞的常規信號不支持排隊,也就是說,執行回調函數期間,再來千百個同個信號時,系統只記錄一次。而后面的32個實時信號則支持排隊。

Linux操作系統編程講解:信號捕捉


責編AJX

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11339

    瀏覽量

    210118
  • 操作系統
    +關注

    關注

    37

    文章

    6882

    瀏覽量

    123582
  • 信號
    +關注

    關注

    11

    文章

    2804

    瀏覽量

    77003
收藏 人收藏

    評論

    相關推薦

    原創丨Linux系統編程篇丨迅為IMX6ULL-對應視頻講解

    本章內容對應視頻講解鏈接(在線觀看):什么是 Linux 系統編程呢?Linux 系統編程也叫 Linu
    發表于 07-30 10:39

    Linux操作系統安裝與使用

    嵌入式網絡編程+嵌入式Linux系統一、Linux操作系統安裝與使用(命令)二、Linux開發工
    發表于 11-05 08:25

    為何將Linux操作系統劃分為用戶和內核

    linux_C網絡編程概述嵌入式網絡編程==嵌入式Linux_C系統編程(文件、進程、進程間通信、多線程、網絡、大并發網絡服務器、數據庫、s
    發表于 12-15 08:35

    Linux操作系統安裝與使用

    嵌入式網絡編程+嵌入式Linux系統Linux操作系統安裝與使用(命令)Linux開發工具(gc
    發表于 12-22 07:47

    Linux操作系統安裝與使用方法

    嵌入式網絡編程+嵌入式Linux系統Linux操作系統安裝與使用(命令)Linux開發工具(gc
    發表于 12-23 06:57

    什么是Linux系統編程

    什么是Linux系統編程Linux系統編程也叫Linux下的高級編程,是介于應用層和驅動層之間
    發表于 12-23 07:30

    是否可以為linux操作系統編譯并在基于debian的rasperry操作系統中運行?

    STM32CubeProgrammer 有一個 C++ API,允許創建使用 qt creator 編譯的程序。是否可以為 linux 操作系統編譯并在基于 debian 的 rasperry 操作系統中運行?
    發表于 12-06 06:01

    基于Linux操作系統下C語言編程入門

    基于Linux操作系統下C語言編程入門
    發表于 10-27 15:36 ?11次下載
    基于<b class='flag-5'>Linux</b><b class='flag-5'>操作系統</b>下C語言<b class='flag-5'>編程</b>入門

    linux系統編程_中文版

    linux系統編程_中文版
    發表于 10-29 10:17 ?0次下載
    <b class='flag-5'>linux</b><b class='flag-5'>系統編程</b>_中文版

    Linux操作系統下C語言編程入門.pdf

    Linux操作系統下C語言編程入門
    發表于 05-17 10:08 ?96次下載

    Linux操作系統知識講解:走進內存

    Linux操作系統知識講解:走進內存
    的頭像 發表于 08-28 10:30 ?2386次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系統</b>知識<b class='flag-5'>講解</b>:走進內存

    Linux操作系統知識講解:走進linux 內存地址空間

    Linux操作系統知識講解:走進linux 內存地址空間
    的頭像 發表于 08-28 10:45 ?5089次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系統</b>知識<b class='flag-5'>講解</b>:走進<b class='flag-5'>linux</b> 內存地址空間

    Linux操作系統知識講解:走進Linux 內存分配算法

    Linux操作系統知識講解:走進Linux 內存分配算法
    的頭像 發表于 08-28 10:57 ?5488次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系統</b>知識<b class='flag-5'>講解</b>:走進<b class='flag-5'>Linux</b> 內存分配算法

    Linux操作系統知識講解:走進Linux 內存使用場景

    Linux操作系統知識講解:走進Linux 內存使用場景
    的頭像 發表于 08-28 11:04 ?3003次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>操作系統</b>知識<b class='flag-5'>講解</b>:走進<b class='flag-5'>Linux</b> 內存使用場景

    為什么我們要掌握Linux系統編程

    為什么我們要掌握Linux系統編程
    的頭像 發表于 05-17 10:00 ?900次閱讀
    主站蜘蛛池模板: 国产精品你懂得| 超碰人人草在线视频| 钉钉女老师| 欧美成人3d动漫专区| 中文无码熟妇人妻AV在线| 国产线精品视频在线观看| 午夜片无码区在线观看| 国产精彩视频在线| 天天射天天爱天天干| 国产成人无码一区AV在线观看| 四虎精品久久| 国产亚洲精品成人a在线| 亚洲精品国产精品精| 久久99视热频国只有精品| 伊人久久精品99热超碰| 美女诱惑性感揉胸| 把内衣脱了把奶露出来| 涩涩网站在线看| 国产午夜不卡在线观看视频666| 亚洲精品色播一区二区 | 大香网伊人久久综合网2020| 亲胸揉胸膜下刺激视频在线观看 | 嗯啊好爽视频| 大学生高潮无套内谢视频| 色一欲一性一乱一区二区三区| 国产成人综合在线| 亚洲绝美精品一区二区| 快播看黄片| 成人在线观看播放| 亚洲精品无码国产爽快A片百度| 久久中文字幕无码A片不卡| www.狠狠色| 99久久做夜夜爱天天做精品| 国产日韩精品一区二区在线观看| 亚洲成人免费在线| 久久综合香蕉久久久久久久| FERRCHINA内入内射| 午夜福利免费院| 美女被黑人巨大进入| 亚洲免费中文| 女人麻豆国产香蕉久久精品|