信號 09 | 信號概念

信號的概念

信號在我們的生活隨處可見,如:古代戰爭中摔杯為號;代戰爭中的信號彈;體育比賽中使用的信號槍,它們都有共性:1. 簡單 2. 不能攜帶大量的信息 3. 滿足某個特定條件才發送

信號是信息的載體,Linux/UNIX環境下,古老、經典的通信方式,現在依然是主要的通信手段。

UNIX早期版本就提供了信號機制,但不可靠,信號可能丟失,Bakeley和AT&T都對信號模型做了更改,增加了可靠信號機制。但彼此不兼容。POSIX.1對可靠信號例程進行了標準化。

?

信號的機制

A給B發送了信號,B收到信號之前執行自己的代碼,收到信號后,不管執行到程序的什么位置,都要暫停運行,去處理信號,處理完畢再繼續執行,與硬件中斷類似——異步模式,但信號是軟件層面上實現的中斷,早期常被稱“軟中斷”。

信號的特征:由于信號是通過軟件方法是是實現,其實現手段導致信號有很強的延時性。但對于用戶來說,這個延遲時間非常短,不易察覺。

注意:每個進程收到的所有信號,都是由于內核負責發送的,內核處理。

?

與信號相關的事件與狀態

產生信號:

  • 按鍵產生:如Ctrl + c、Ctrl + z, Ctrl + \
  • 系統調用產生:如kill、raise、alarm
  • 硬件異常產生:如非法訪問內存(段錯誤)、除0(浮點數除外)、內存對齊錯誤(總線錯誤)

遞達:遞送并且到達進程

未決:產生和遞達之間的狀態。主要由于阻塞(屏蔽)導致該狀態。

信號的處理方式:

  • 執行默認動作:默認操作統通常是終止進程,這取決于被發送的信號
  • 忽略(丟棄):不采取任何操作、有兩個信號不能忽略:SIGKILL和SIGSTOP
  • 捕捉(調用用戶處理函數):內核中斷正在執行的代碼,轉去執行先前注冊過的處理程序

linux內核的進程控制塊PCB是一個結構體,task_struct,除了包含進程ID、狀態、工作目錄、用戶ID、組ID、文件描述符、還包含了信號相關的信息,主要指阻塞信號集和未決信號集。

阻塞信號集:將某些信號加入集和,對它們設置屏蔽屏蔽,當屏蔽x信號后,在收到該信號,該信號的處理退后(解除屏蔽后)

未決信號集

  • 信號產生,未決信號集中描述該信號的位立即翻轉為1, 表信號處于未決轉態。當信號被處理翻轉回為0,這一時刻往往非常短暫。
  • 信號的產生后由于默寫原因(主要指阻塞)不能抵達,這類信號的集合稱之為未決信號集。在屏蔽解除前,信號一直處于未決狀態。

?

?

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

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

相關文章

一招徹底幫你搞定HashMap源碼,項目實戰

ES 集群架構演進之路 1、初始階段 訂單中心ES初始階段如一張白紙,架設方案基本沒有,很多配置都是保持集群默認配置。整個集群部署在集團的彈性云上,ES集群的節點以及機器部署都比較混亂。同時按照集群維度來看,一個ES集群會有單…

【信號】信號集、sigprocmask、sigpending

一、信號集操作函數 內核通過讀取未決信號集來判斷信號是否應被處理。信號屏蔽字mask可以影響未決信號集。而我們可以在用程序自定義set來改變mask,來達到屏蔽指定信號目的。 sigset_t set; // typedef unsigned long sig…

一招讓你拿下seata分布式事務框架,看這篇文章準沒錯!

第一階段:架構師筑基必備技能 我覺得,但凡是個成年人應該都清楚扎實的基本功對自己的工作幫助有多重要。從各大招聘網站的招聘要求來看,第一條都明確說明需要扎實的Java基礎。因此,一般筆試以及面試的第一輪,對基礎的…

函數signal、sigaction

二、函數sigaction 修改信號處理動作(通常在Linux用來注冊一個信號的捕捉函數) #inlcude<signal.h> int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 參數&#xff1a; act&am…

一文了解OOM及解決方案,你還看不明白?

InnoDB總體結構 首先我們來看官網的一張圖(圖片來源于MySQL官網)&#xff1a; 從上圖中可以看出其主要分為兩部分結構&#xff0c;一部分為內存中的結構(上圖左邊)&#xff0c;一部分為磁盤中的結構(上圖右邊) 內存結構 InnoDB內存中的結構主要分為&#xff1a;Buffer Pool,…

信號 09 | 函數pause

函數pause 調用該函數可以造成進程主動掛起&#xff0c;等待信號喚醒&#xff0c;調用該系統調用的進程處于阻塞狀態(主動放棄CPU)直到有信號遞達將其喚醒。 將進程置為可中斷睡眠狀態。然后 它調用schedule()&#xff0c;使linux進程調度器找到另一個進程來運行。pause使調用…

一文搞懂JVM架構和運行時數據區,全網最新

1.Java基礎面試知識點 Java中和equals和hashCode的區別int、char、long各占多少字節數int與integer的區別探探對Java多態的理解String、StringBuffer、StringBuilder區別什么是內部類&#xff1f;內部類的作用抽象類和接口區別抽象類的意義抽象類與接口的應用場景抽象類是否可…

一條正確的Java職業生涯規劃,幫你突破瓶頸

面試題模塊介紹&#xff1a; 一、Java 基礎 JDK 和 JRE 有什么區別&#xff1f; 和 equals 的區別是什么&#xff1f;兩個對象的 hashCode()相同&#xff0c;則 equals()也一定為 true&#xff0c;對嗎&#xff1f;final 在 java 中有什么作用&#xff1f;java 中的 Math.roun…

【線程】線程基本函數

一、pthread_self函數 功能&#xff1a;獲取線程ID。 pthread_t pthread_self(void); 線程ID&#xff1a;pthread_t類型&#xff0c;本質&#xff1a;在Linux為無符號整數(%lu)&#xff0c;其他系統可能是結構體實現線程ID是進程內部識別標志。&#xff08;兩個進程間&#…

一條正確的Java職業生涯規劃,順利通過阿里Java崗面試

珍藏版&#xff08;1&#xff09;——Mybatis入門 1.什么是MyBatis 2.為什么我們要用Mybatis? 3.Mybatis快速入門 3.1 導入開發包 3.2準備測試工作 3.3 創建mybatis配置文件 3.4 編寫工具類測試是否獲取到連接 3.5 創建實體與映射關系文件 3.6 編寫DAO 4.Mybatis工作…

線程控制 12 | 線程屬性

本節作為指引性介紹&#xff0c;linux下線程的屬性是可以根據實際項目需要&#xff0c;進行設置&#xff0c;之前我們討論的線程都是采用線程的默認屬性&#xff0c;默認屬性已經可以解決絕大部分開發遇到的問題。如我們對程序的性能提出更高的要求那么需要設置線程屬性&#x…

一次違反常規的Java大廠面試經歷,系列教學

第一部分 Java相關以及答案 答案 第二部分算法跟編程 第三部分html&JavaScript&ajax部分 答案 第四部分Javaweb部分 答案 第五部分數據庫部分 答案 第六部分XML部分 答案 第七部分.流行的框架與新技術 答案 第八、九部分.軟件工程與設計模式以及j2ee部分 最后 筆者…

函數perror、strerror

perror函數 函數原型&#xff1a; #include<stdio.h> void perror(const char *msg); 測試代碼&#xff1a; #include<unistd.h> #include<errno.h> #include<stdio.h>int main() {int ret;ret close(10);if(ret -1) {perror("close error…

一次違反常規的Java大廠面試經歷,重難點整理

目錄 Kafka的基本介紹Kafka的設計原理分析Kafka數據傳輸的事務特點Kafka消息存儲格式副本&#xff08;replication&#xff09;策略Kafka消息分組&#xff0c;消息消費原理Kafak順序寫入與數據讀取消費者&#xff08;讀取數據&#xff09; Kafka的基本介紹 Kafka是最初由Lin…

一步搞定你疑惑的數據結構與算法系列,原理+實戰講解

螞蟻金服一面&#xff1a; 下午杭州的電話&#xff0c;問有沒有空&#xff0c;果斷有空&#xff0c;雖然感覺略顯緊張&#xff0c;有點懵逼。 面試的題目&#xff1a; HashMap和Hashtable的區別實現一個保證迭代順序的HashMap說一說排序算法&#xff0c;穩定性&#xff0c;復…

互斥量(互斥鎖)

一、互斥量mutex Linux提供一把互斥鎖mutex(也稱之為互斥量)每個線程在對資源操作前都嘗試先加鎖&#xff0c;成功加鎖才能操作&#xff0c;操作結束后解鎖。資源還是共享的&#xff0c;線程間也還是競爭的&#xff0c;但通過鎖將資源的訪問變為互斥操作&#xff0c;而后與時間…

一眼就能看懂的Java自學手冊,終局之戰

珍藏版&#xff08;1&#xff09;——Mybatis入門 1.什么是MyBatis 2.為什么我們要用Mybatis? 3.Mybatis快速入門 3.1 導入開發包 3.2準備測試工作 3.3 創建mybatis配置文件 3.4 編寫工具類測試是否獲取到連接 3.5 創建實體與映射關系文件 3.6 編寫DAO 4.Mybatis工作…

Centos 6.x

1. centos升級gcc教程&#xff1a;鏈接 2. 虛擬機中的Centos聯通網絡&#xff1a;鏈接 3. 虛擬機安裝Centos7系統教程&#xff1a;鏈接

Java虛擬機學習集錦是我攢來的,帶你碾壓面試官!

1. 一致性&#xff08;Consistency&#xff09; 一致性&#xff08;Consistency&#xff09;是指多副本&#xff08;Replications&#xff09;問題中的數據一致性。可以分為強一致性、順序一致性與弱一致性。 1.1 強一致性&#xff08;Strict Consistency&#xff09; 也稱為…

Java虛擬機學習集錦是我攢來的,看這篇文章準沒錯!

一面 介紹一下自己 問項目經歷, 聊"數據同步" 接著聊上了 K8S 的項目 有沒有什么鉆研得比較深得技術&#xff1f;&#xff08;大佬&#xff1a;kubernetes, golang, prometheus, java&#xff09; kubernetes 的架構是怎么樣的? 這個問題很大&#xff0c;拆成 …