不可靠的信號、可靠信號

一、不可靠信號

lnux信號機制基本上是從UNIX系統中繼承過來的。早期UNIX系統中的信號機制比較簡單和原始,后來在實踐中暴露一些問題,它的主要問題是:

1. 進程每次處理信號后,就將對信號的響應設置為默認動作,在某些情況下,將導致對信號的錯誤處理;因此,在用戶如果不希望這樣的操作,那么就要在信號處理函數結尾在一次調用signal(),重新安裝該信號。

2. 早期UNIX下的不可靠信號主要指的是進程可能對信號做出錯誤的反應以及信號可能丟失。

3. linux支持不可靠信號,但是對不可靠信號機制做出了改進:在調用完信號處理函數后,不必重新調用該信號的安裝函數(信號安裝函數是在可靠機制上是實現的)。因此,linux下的不可靠信號問題主要指的是信號可能丟失

?

二、不可靠信號的發展

隨著時間的發展,實踐證明了有必要對信號的原始機制加以改進和擴充。所以,后來出現的各種UNIX版本分別在這方面進行了研究,力圖實現"可靠信號"。由于原來定義的信號已經有許多應用,不好再做改動,最終只好又新增加了一些信號,并在一開始就把它們定義為可靠信號,這些信號支持排隊,不會丟失。

同時,信號的發送和安裝也出現了新版本:發送函數sigqueue()及信號安裝函數sigaction()。

早期UNIX系統只定義了32種信號,Ret hat7.2支持64種信號,編號0-63(SIGRTMIN = 31, SIGRTMAX = 63),將來可能進一步增加,這需要得到內核的支持。前32種信號已經有了預定義值,每個信號有了確定的用途和定義,并且每種信號都有各自缺省動作。如按鍵盤CTRL + C時,會產生SIGINT信號,對該信號的默認反應就是進程終止。后32個信號表示實時信號,等同前面闡述的可靠信號。這保證了發送的多個實時信號都被接收,實時信號是POSIX標準的一部分,可用于應用進程。

非實時信號都不支持排隊,都是不可靠信號;實時信號都支持排隊,都是可靠信號。

?

三、可靠信號術語和語義

執行信號的處理動作稱作為遞達(Delivery),信號從產生到遞達之間的狀態,稱之為信號未決(Pending),進程可以選擇阻塞(Block)某個信號。被阻塞的信號產生時將保持在未決狀態,直到進程解除對信號的阻塞,才執行遞達的動作。注意,阻塞和忽略是不同的,只要信號被阻塞就不會遞達,而忽略信號是在遞達之后可選的一種處理動作。信號在內核中的表示可以看作是這樣的

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/385568.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/385568.shtml
英文地址,請注明出處:http://en.pswp.cn/news/385568.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【大牛系列教學】docker.service配置文件詳情

01 阿里中間件(四面,Java崗) 1.1 Java中間件一面 技術一面考察范圍 重點問了Java線程鎖:synchronized 和ReentrantLock相關的底層實現 線程池的底層實現以及常見的參數 數據結構基本都問了一遍:鏈表、隊列等 Java內存…

可重入函數和不可重入函數

一、可重入函數 為了增強程序的穩定性,在信號處理函數中應使用可重入函數。 所謂可重入函數是指一個可以被多個任何調用的過程,任務在調用時不必擔心數據是否出錯。因為進程在收到信號后,就將跳轉到信號處理函數去接著執行,如果…

【大牛系列教學】java面試常考的編程題

1. 面試官:工作中使用過Zookeeper嘛?你知道它是什么,有什么用途呢? 小菜雞的我: 有使用過的,使用ZooKeeper作為dubbo的注冊中心,使用ZooKeeper實現分布式鎖。ZooKeeper,它是一個開…

中斷的系統調用

系統調用可分為兩類:慢速系統調用和其他系統調用 慢速系統調用:可能會使進程永遠阻塞的一類,如果在阻塞期間收到一個信號,該系統調用就被中斷,不再繼續執行(早期);也可以設定系統調用是否重啟。如&#xf…

【好文推薦】java模板引擎性能

01. 基礎架構:一條SQL查詢語句是如何執行的? MySQL 的邏輯架構圖 02. 日志系統:一條SQL更新語句是如何執行的? 之前你可能經常聽DBA同事說,MySQL可以恢復到半個月內任意一秒的狀態,驚嘆的同時,…

函數sigqueue

一、函數sigqueue sigqueue函數原型: 函數作用:新的發送信號系統調用,主要是針對實時信號提出的支持信號帶有參數,與函數sigaction()配合使用 int sigqueue(pid_t pid, int signo, const union sigval v…

【好文推薦】mysql創建數據庫語句utf-8

性能調優 影響MySQLServer 性能的相關因素 商業需求對性能的影響系統架構及實現對性能的影響Query語句對系統性能的影響Schema設計對系統的性能影響硬件環境對系統性能的影響 MySQL 數據庫鎖定機制 MySQL鎖定機制簡介各種鎖定機制分析合理利用鎖機制優化MySQL MySQL數據庫Qu…

函數setjump和longjmp

一、主要函數應用 函數setjmp 原型&#xff1a; #include <setjmp.h> Int setjmp(jmp_buf env);返回值&#xff1a;若直接調用則返回0&#xff0c;若從longjmp調用返回則返回非0值的longjmp中的val值 分析&#xff1a; 返回值&#xff1a;若直接調用則返回0&#xf…

java接口的定義與實現實驗報告,趕緊收藏備戰金三銀四!

一、對Kafka的認識 1.Kafka的基本概念 2.安裝與配置 3.生產與消費 4.服務端參數配置 二、生產者 1.客戶端開發 2.原理分析 3.重要的生產者參數 三、消費者 1.消費者與消費組 2.客戶端開發 四、主題與分區 1.主題的管理 2.初識KafkaAdminCilent 3.分區的管理 4.如何…

函數sigsetjump和siglongjump

摘要&#xff1a; 在信號處理函數執行時&#xff0c;會阻塞當前信號。當信號處理函數返回時&#xff0c;系統會幫我們把剛剛阻塞的信號再從阻塞集中移除。一、 臨時阻塞特性 當執行信號處理函數的時候&#xff0c;會臨時將當前被處理信號阻塞。為了能說明問題&#xff0c;采用…

java操作word文檔,深度解析,值得收藏

Java虛擬機內存模型 Java虛擬機內存模型中定義的訪問操作與物理計算機處理的基本一致&#xff01; Java中通過多線程機制使得多個任務同時執行處理&#xff0c;所有的線程共享JVM內存區域main memory&#xff0c;而每個線程又單獨的有自己的工作內存&#xff0c;當線程與內存區…

函數sigsuspend

1. 測試代碼&#xff1a; #include<stdio.h> #include<stdlib.h> #include<signal.h> #include<errno.h> #include<unistd.h>void catch_sigalrm(int signo) {; }unsigned int mysleep(unsigned int seconds) {struct sigaction newact, olda…

java支付模塊架構,漲薪7K!

Java基礎 JDK 和 JRE 有什么區別&#xff1f; 和 equals 的區別是什么&#xff1f;兩個對象的 hashCode()相同&#xff0c;則 equals()也一定為 true&#xff0c;對嗎&#xff1f;final 在 java 中有什么作用&#xff1f;java 中的 Math.round(-1.5) 等于多少&#xff1f;Stri…

【信號】SIGCHLD信號

一、SIGCHLD信號 1. SIGCHLD簡介 SIGCHLD的產生條件&#xff1a; 子進程終止子進程接收到SIGSTOP信號停止時子進程處于停止狀態&#xff0c;接收到SIGCONT后喚醒注意&#xff1a;通過signal(SIGCHLD, SIG_IGN)通知內核對子進程的結束不關心&#xff0c;由內核回收。如果不想讓…

java改錯題技巧,看這篇文章準沒錯!

阿里 mq 消息可靠性,冪等如何保證分布式鎖的實現方案比較,為什么選擇 zookeeper, zookeeper 一致性協議原理線程池參數,阻塞隊列實現一致性 Hash解決什么問題, 如何實現? 虛擬節點的作用?Java 鎖的實現方式, 比較? AQS實現原理?公平非公平實現原理?CAS 實現原理volatile 實…

函數stat、fstat、fstatat和lstat

一、主要函數應用 #include <sys/stat.h> int stat(const char *path, struct stat *buf); int fstat(int fd, struct stat *buf) int lstat(const char *path, struct stat *buf); int fstat(int fd, const char *path, struct stat *buf, int flag);參數&#xff1a;…

java教程pdf下載百度云,面試題+筆記+項目實戰

一面問題&#xff1a;MySQLRedisKafka線程算法 mysql知道哪些存儲引擎&#xff0c;它們的區別mysql索引在什么情況下會失效mysql在項目中的優化場景&#xff0c;慢查詢解決等mysql有什么索引&#xff0c;索引模型是什么B-樹與B樹的區別&#xff1f;為什么不用紅黑樹mysql主從同…

函數mkdir、mkdirat和emdir

一、目錄的權限位 目錄的權限位&#xff0c;至少要設置一個執行許可位。即 rwx 中的那個 x 位。如果不設置&#xff0c;就沒辦法使用 cd 命令進入目錄&#xff0c;也無法讀取目錄下的文件內容。所以&#xff0c;這個位是必須的。目錄的寫權限位。如果未設置寫權限位(w 位)&…

java教程傳智播客,面試真題解析

01 阿里中間件&#xff08;四面&#xff0c;Java崗&#xff09; 1.1 Java中間件一面 技術一面考察范圍 重點問了Java線程鎖&#xff1a;synchronized 和ReentrantLock相關的底層實現 線程池的底層實現以及常見的參數 數據結構基本都問了一遍&#xff1a;鏈表、隊列等 Java內存…

函數chdir和get

摘要&#xff1a; chdir 這個命令類似于 linux 的命令 cd&#xff0c;而 getcwd 有點像 pwd。 函數原型&#xff1a; #include <unistd.h> int chdir(const char *path); char *getcwd(char *buf, size_t size); 當前工作目錄 當前工作目錄是針對進程而言的&#xff0…