Linux 信號的基本概念

信號的基本概念

1. 信號的概念

信號是Linux系統響應某些條件產生的一些事件。接收到信號的進程會相應地采取一些行動。

2. 信號的生成

信號是由于某些錯誤條件而生成的,如內存段沖突、浮點處理器錯誤或非法指令等。信號的生成其實就是一種軟件層次的中斷,信號由shell和終端處理器生成來引起中斷,信號還可以作為在進程間傳遞消息或修改行為的一種方式,明確地由一個進程發送給另一個進程。一個進程要么正常結束,要么就是某一個信號把這個進程中斷了。

3.信號的響應方式

信號產生之后,進程接收這個信號,然后做出一些響應,做出的響應有三種方式,默認方式、忽略和自定義。改變這三種響應方式要通過系統調用signal()。

與信號有關的系統調用在“signal.h”頭文件中有聲明。

4. 信號名稱的定義

信號的值在系統源碼中的定義如下,它們都以SIG開頭:

(1)#define SIGHUP 1 連接掛斷
(2)#define SIGINT 2 終端中斷,鍵盤按下Ctrl+c時,會產生該信號
(3)#define SIGQUIT 3 終端退出
(4)#define SIGILL 4 *非法指令
(5)#define SIGTRAP 5 由斷點指令或其它陷阱(trap)指令產生
(6)#define SIGABRT 6 調用abort函數生成的信號
(7)#define SIGIOT 6 建立CORE文件,執行I/O自陷
(8)#define SIGBUS 7 建立CORE文件,總線錯誤
(9)#define SIGFPE 8 建立CORE文件,浮點異常
(10)#define SIGKILL 9 終止進程,殺死進程,該信號的響應方式不允許改變
(11)#define SIGUSR1 10 終止進程,用戶定義信號1
(12)#define SIGSEGV 11 建立CORE文件,段非法錯誤
(13)#define SIGUSR2 12 終止進程,用戶定義信號2
(14)#define SIGPIPE 13 終止進程、向一個沒有讀進程的管道寫數據,讀端關閉的描述符,寫端寫入時產生,該信號會終止程序
(15)#define SIGALRM 14 終止進程,計時器到時
(16) #define SIGTERM 15 終止進程,軟件終止信號,系統kill命令默認發送的信號
(17)#define SIGSTKFLT 16
(18)#define SIGCHLD 17 忽略信號,當子進程停止或退出時會默認給父進程發送該信號
(19)#define SIGCONT 18 忽略信號,繼續執行一個停止的進程
(20)#define SIGSTOP 19 停止進程 非終端來的停止信號
(21)#define SIGTSTP 20 停止進程,終端來的停止信號 Ctrl+Z
(22)#define SIGTTIN 21 停止進程,后臺進程讀終端
(23)#define SIGTTOU 22 停止進程,后臺進程寫終端
(24)#define SIGURG 23 忽略信號,I/O緊急信號

5.信號的實現

收到信號的實體是一個進程,信號的實現在進程的PCB中記錄,在PCB中有一個長整型變量signa:long a;,它有32個位,一開始它的值都為0,表示沒有收到信號,假如現在通過kill(pid,sig)發送了一個信號,然后通過pid找到對應的PCB中的a,如果通過信號代號把a的1偏移對應的代號個位置,就代表當前進程收到了對應的代號的信號,接下來要處理這個信號,處理完這個信號的時候在把a恢復成0就可以了。如果極短時間內連續發送多個代號相同的信號,其實只能響應一次,因為第一次發送該信號時就已經把a的1偏移了對應的代號個位置,后面再發送相同的信號時是沒有變化的,所以當a發生偏移還沒有恢復之前,連續發送相同的信號沒有意義。

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

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

相關文章

adb對安卓app進行抓包(ip連接設備)

adb對安卓app進行抓包(ip連接設備) 一,首先將安卓設備的開發者模式打開,提示允許adb調試 二,自己的筆記本要和安卓設備在同一個網段下(同連一個WiFi就可以了) 三,在筆記本上根據i…

JVM——類的生命周期

文章目錄 類加載過程加載驗證準備解析初始化 卸載 一個類的完整生命周期如下: 類加載過程 Class 文件需要加載到虛擬機中之后才能運行和使用,那么虛擬機是如何加載這些 Class 文件呢? 系統加載 Class 類型的文件主要三步:加載->連接->…

Redis-秒殺

唉 就記得當時搶冰墩墩的時候的秒殺了 我們要注意什么問題呢? 1.幾百萬人在這個瞬間搶冰墩墩 這個瞬間會有大量的請求 服務器要能抗的住 2.不能超賣,就那些冰墩墩 賣多了壓根沒有 好不容易搶到你說沒貨了怕不是要被沖爛 3.避免少賣 攏共就那些 你再少賣點 沒屁了 4.防黃牛…

CentOS系統環境搭建(十五)——CentOS安裝Kibana

centos系統環境搭建專欄🔗點擊跳轉 關于Elasticsearch的安裝請看CentOS系統環境搭建(十二)——CentOS7安裝Elasticsearch。 CentOS安裝Kibana 文章目錄 CentOS安裝Kibana1.下載2.上傳3.解壓4.修改kibana配置文件5.授予es用戶權限6.kibana 后臺…

uniapp的UI框架組件庫——uView

在寫uniapp項目時候,官方所推薦的樣式庫并不能滿足日常的需求,也不可能自己去寫相應的樣式,費時又費力,所以我們一般會去使用第三方的組件庫UI,就像vue里我們所熟悉的elementUI組件庫一樣的道理,在uniapp中…

? Spring Clould 配置中心 - Nacos

視頻地址:微服務(SpringCloudRabbitMQDockerRedis搜索分布式) Nacos配置管理-Nacos實現配置管理(P24、P25) Nacos除了可以做注冊中心,同樣可以做配置管理來使用。 當微服務部署的實例越來越多&#xff0c…

18萬字應急管理局智慧礦山煤礦數字化礦山技術解決方案WORD

導讀:原文《18萬字應急管理局智慧礦山煤礦數字化礦山技術解決方案WORD》(獲取來源見文尾),本文精選其中精華及架構部分,邏輯清晰、內容完整,為快速形成售前方案提供參考。 目 錄 第一章 項目概述 1.1項目…

《Go 語言第一課》課程學習筆記(七)

代碼塊與作用域:如何保證變量不會被遮蔽? 什么是變量遮蔽呢?package mainimport ("fmt""github.com/google/uuid""github.com/sirupsen/logrus" )func main() {fmt.Println("hello, world")logrus.…

私域新零售商業模式成功的八大要素

從事互聯網行業多年以來,遇到客戶問最多的一個問題,就是什么樣的模式火呀?在設計一個商業模式時,不單單只是考慮資金和人脈等等資源的,其實還是需要遵循這八大原則,它包括:客戶價值最大化原則、…

PyTorch學習筆記(十三)——現有網絡模型的使用及修改

以分類模型的VGG為例 vgg16_false torchvision.models.vgg16(weightsFalse) vgg16_true torchvision.models.vgg16(weightsTrue) print(vgg16_true) vgg16_true.classifier.add_module("add_linear",nn.Linear(1000,10)) print(vgg16_true) vgg16_false.classifie…

C#學習,委托,事件,泛型,匿名方法

目錄 委托 聲明委托 實例化委托 委托的多播 委托的用途 事件 通過事件使用委托 聲明事件 泛型 泛型的特性 泛型方法 泛型的委托 匿名方法 編寫匿名方法的語法 委托 類似于指針,委托是存有對某個方法的引用的一種引用類型變量,引用可以在運…

vue中使用faker庫生成指定類型的隨機數據

介紹 Faker.js 是十分流行的 Node.js 工具庫,2022年初,Faker.js的作者突然刪庫跑路,導致眾多應用程序崩潰,為了繼續使用Faker的功能,社區的幾位開發者組成團隊決定創建并維護新項目faker-js/faker,現其已成…

Docker+Selenium Grid搭建自動化測試平臺

安裝docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce -y Create a Docker Network docker network create grid 下載鏡像 hu…

laravel-admin之 解決上傳圖片不顯示 $form->image(‘image‘); 及 $grid->column(‘image‘);

參考 https://blog.csdn.net/u013164285/article/details/106017464 $grid->column(‘image’)->image(‘http://wuyan.cn’, 100, 100); // //設置服務器和寬高 圖片上傳的域名 上傳的圖片不顯示 在 這里設置了圖片的上傳路徑 在這里設置 域名 就可以回顯圖片

【計算機視覺|生成對抗】帶條件的對抗網絡進行圖像到圖像的轉換(pix2pix)

本系列博文為深度學習/計算機視覺論文筆記,轉載請注明出處 標題:Image-to-Image Translation with Conditional Adversarial Networks 鏈接:Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…

如何學習正則表達式

正則是什么,能做什么? 正則,就是正則表達式,英文是 Regular Expression,簡稱 RE。顧名思義,正則其實就是一種描述文本內容組成規律的表示方式。 在編程語言中,正則常常用來簡化文本處理的邏輯…

Android DataStore:安全存儲和輕松管理數據

關于作者:CSDN內容合伙人、技術專家, 從零開始做日活千萬級APP。 專注于分享各領域原創系列文章 ,擅長java后端、移動開發、人工智能等,希望大家多多支持。 目錄 一、導讀二、概覽三、使用3.1 Preferences DataStore添加依賴數據讀…

LVS負載均衡集群-NAT模式部署

集群 集群:將多臺主機作為一個整體,然后對外提供相同的服務 集群使用場景:高并發的場景 集群的分類 1.負載均衡器集群 減少響應延遲,提高并發處理的能力 2,高可用集群 增強系統的穩定性可靠性&…

封裝vue2局部組件都要注意什么

一. 關于局部組件組成的三個部分&#xff08;template, script, style&#xff09; template > 組件的模板結構 &#xff08;必選&#xff09; 每個組件對應的模板結構&#xff0c;需要定義到template節點中 <template><!-- 當前組件的dom結構&#xff0c;需…

Java SPI加載機制

SPI加載機制 SPI&#xff08;Service Provider Interface&#xff09;是一種通過外界配置來加載具體代碼內容的技術手段。SPI是JDK內置的一種服務提供發現機制&#xff0c;用于實現框架的擴展和組件替換。 在SPI中&#xff0c;框架提供一整套接口&#xff0c;使用者實現這些接…