20.Linux進程信號(一)

信號: 產生->保存->處理

一、預備知識

信號vs信號量->沒有任何關系

什么叫做信號?

中斷我們正在做的事情,是一種事件的異步通知機制。

同步和異步理解:

同步指事件發生具有一定的順序性(如命名管道中服務端讀方式打開會阻塞,直到客戶端的寫入打開),異步指事情發生沒有順序性(如共享內存的讀取和寫入沒有順序性)。

信號的產生相對于進程的運行是異步的。

信號是發送給進程的。

基本結論:

1.信號處理,進程在信號沒有產生的時候,早就知道信號該如何處理了

2.信號的處理,不是立即處理,而是可以等一會在處理,合適的時候,進行信號的處理。

3.人能識別信號,是被“提前教育”過的,進程也是如此,OS程序員設計的進程,進程早已內置對于信號的識別和處理方式。

4.信號源非常多->給進程產生信號的,信號源,也非常多。

SIGINT:鍵盤產生信號。

收到信號,處理信號(進程收到信號,合適的時候處理信號):

1.默認處理動作

2.自定義信號處理動作

3.忽略處理

自定義捕捉系統調用:

sighandler_t 實質上等同于void(*)(int)

sighandler_t signal(int signum, sighandler_t handler);

參數:

signum:信號編號

handler: 自定義的信號處理方式,當收到對應的信號,就回調執行handler方法。

返回值:成功返回handler,失敗返回SIG_ERR(一個宏,通常定義為 (void (*)(int))-1,表示一個無效的函數指針),錯誤碼被設置。

二、信號的產生

1.鍵盤產生信號

ctrl+C向前臺進程發送2號信號。

相當一部分信號的處理動作就是讓自己終止。

前臺進程和后臺進程:

./xxx 前臺進程 ->鍵盤產生的信號,只能發送給前臺進程。

./xxx & 后臺進程

前臺進程只能有一個,本質上前臺進程就是要從標準輸入獲取數據的。

后臺進程可以有多個。

前后臺移動命令:

jobs-l 查看當前終端會話中通過?&?或?Ctrl+Z?掛起的后臺任務
fg 任務號? 特定的進程,提到前臺
ctrl+z 進程切換到后臺,并且暫停

bg 任務號? 讓指定的后臺進程進行回復運行

什么叫做給進程發送信號?
信號產生之后,不是立即處理的,所以要求進程把信號記錄下來。

發送信號本質:向目標進程寫信號,修改位圖!

信號記錄在task_struct中,是一個位圖結構->屬于操作系統的數據結構對象->修改位圖本質就是修改內核的數據->不管信號怎么產生,發送信號,在底層,必須讓OS發送。

特別注意:不是所有信號都能被自定義捕捉。

2.系統調用產生信號

int kill(pid_t pid, int sig);? ? //給目標進程發送信號

raise給自己發送信號,abort給自己進程發送終止信號(發送6號新號,要求進程必須處理,默認終止)。

3.系統指令kill產生信號

4.產生信號的方式(硬件異常)

常見的硬件異常:

除0,野指針。

信號全部都是操作系統發送的!

操作系統怎么知道犯錯了?->操作系統是軟硬件資源的管理者->CPU,寄存器,狀態寄存器(標志寄存器:EFLAGS)可以判斷溢出

野指針異常->cpu里的MMU將虛擬地址轉化成物理地址失敗了->硬件報錯

5.產生信號的方式---軟件條件

進程--管道--進程,在匿名管道,如果讀端關閉,寫端繼續,操作系統就會發送SIGPIPE信號來終止寫端進程,OS不做沒有意義的事情。

調用alarm函數可以設定?個鬧鐘,也就是告訴內核在 seconds 秒之后給當前進程發SIGALRM 信號,該信號的默認處理動作是終止當前進程。
這個函數的返回值是0或者是以前設定的鬧鐘時間還余下的秒數。
例如:alarm(5)->過5秒終止,返回值是0
alarm(5)->過3秒,設alarm(10)->過10秒終止了,返回值為2,即以前設定鬧鐘剩余的秒數
pause函數作用:暫停,等待信號到來,直到信號處理動作結束,pause函數才會返回。
操作系統本質:死循環pause,等待信號到來,每隔一段時間,CPU向操作系統發送硬件中斷。
如何理解鬧鐘:
時間片本質就是一個計數器。
鬧鐘理解:鬧鐘的結構里存有過期時間,組織方式可以理解成最小堆,將當前操作系統記錄的時間戳與鬧鐘堆頂的時間戳進行比較,如果堆頂的時間戳大于等于操作系統當前記錄的,就向對應的進程發送SIGALRM信號,同時把堆頂刪除。

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

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

相關文章

【C++】Vector核心實現:類設計到迭代器陷阱

vector 模擬實現代碼的核心下面從類設計、核心接口、內存安全、常見陷阱、測試場景5 個維度,提煉需重點掌握的知識點,覆蓋面試高頻考點與實踐易錯點:一、類結構與成員變量(基礎框架)vector 的核心是通過三個迭代器&…

并發編程指南 內存模型

文章目錄5.1 內存模型5.1.1 對象和內存位置5.1.2 對象、內存位置和并發5.1.3 修改順序5.1 內存模型 內存模型:一方面是內存布局,另一方面是并發。并發的基本結構很重要,特別是低層原子操作。因為C所有的對象都和內存位置有關,所以…

血緣元數據采集開放標準:OpenLineage Integrations Compatibility Tests Structure

OpenLineage 是一個用于元數據和血緣采集的開放標準,專為在作業運行時動態采集數據而設計。它通過統一的命名策略定義了由作業(Job)、運行實例(Run)和數據集(Dataset) 組成的通用模型&#xff0…

執行一條select語句期間發生了什么?

首先是連接器的工作,嗯,與客戶端進行TCP三次握手建立連接,校驗客戶端的用戶名和密碼,如果用戶名和密碼都對了,那么就會檢查該用戶的權限,之后執行的所有SQL語句都是基于該權限接著客戶端就可以向數據庫發送…

element el-select 默認選中數組的第一個對象

背景&#xff1a;在使用element組件的時候&#xff0c;我們期望默認選中第一個數值。這里我們默認下拉列表綁定的lable是中文文字&#xff0c;value綁定的是數值。效果展示&#xff1a;核心代碼&#xff1a;<template><el-select v-model"selectValue" plac…

【論文閱讀】LightThinker: Thinking Step-by-Step Compression (EMNLP 2025)

論文題目&#xff1a;LightThinker: Thinking Step-by-Step Compression 論文來源&#xff1a;EMNLP 2025&#xff0c;CCF B 論文作者&#xff1a; 論文鏈接&#xff1a;https://arxiv.org/abs/2502.15589 論文源碼&#xff1a;https://github.com/zjunlp/LightThinker 一、…

ABAQUS多尺度纖維增強混凝土二維建模

本案例是通過ABAQUS對論文Study on the tensile and compressive mechanical properties of multi-scale fiber-reinforced concrete: Laboratory test and mesoscopic numerical simulation&#xff08;https://doi.org/10.1016/j.jobe.2024.108852&#xff09;中纖維增強混凝…

C++ ---- 模板的半特化與函數模板的偏特化

在 C 中&#xff0c;模板提供了一種強大的泛型編程方式&#xff0c;使得我們能夠編寫類型無關的代碼。然而&#xff0c;在實際使用中&#xff0c;有時我們需要根據具體的類型或類型組合對模板進行定制&#xff0c;這時就需要用到模板的特化。本文將介紹半模板特化和函數模板的偏…

為何 React JSX 循環需要使用 key

key 是 React 用于識別列表中哪些子元素被改變、添加或刪除的唯一標識符 它幫助 React 更高效、更準確地更新和重新渲染列表 1、核心原因&#xff1a;Diff算法與性能優化 React 的核心思想之一是通過虛擬 DOM (Virtual DOM) 來減少對真實 DOM 的直接操作&#xff0c;從而提升性…

Jetson AGX Orin平臺R36.3.0版本1080P25fps MIPI相機圖像采集行缺失調試記錄

1.前言 主板:AGX Orin 官方開發套件 開發版本: R36.3.0版本 相機參數如下: 相機硬件接口: 2. 梳理大致開發流程 核對線序/定制相機轉接板 編寫camera driver驅動 編寫camera dts配置文件 調camera參數/測試出圖 前期基本流程就不多介紹了直接講正題 3. 問題描述 …

力扣hot100:螺旋矩陣(邊界壓縮,方向模擬)(54)

在解決螺旋矩陣問題時&#xff0c;我們需要按照順時針螺旋順序遍歷矩陣&#xff0c;并返回所有元素。本文將分享兩種高效的解決方案&#xff1a;邊界收縮法和方向模擬法。題目描述邊界收縮法邊界收縮法通過定義四個邊界&#xff08;上、下、左、右&#xff09;來模擬螺旋遍歷的…

[嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_用Qt編譯linux-Opencv庫 測試

[嵌入式embed][Qt]Qt5.12Opencv4.xCmake4.x_用Qt編譯linux-Opencv庫 & 測試前文:準備環境安裝qt-opencv必備庫git-clone opencv庫編譯opencv庫特殊:opencv編譯的include,編譯出來后多嵌套了一層文件夾,手工處理下改為include/opencv2測試demo新建項目QOpencv3.promain.cpp百…

百度智能云「智能集錦」自動生成短劇解說,三步實現專業級素材生產

備受剪輯壓力困擾的各位自媒體老板、MCN 同學們、投放平臺大佬們&#xff0c;解放雙手和大腦的好機會它來了&#xff01; 在這個數字化飛速發展的時代&#xff0c;智能技術正以前所未有的速度改變著我們的生活與工作方式。百度智能云&#xff0c;作為智能科技的引領者&#xf…

FPGA筆試面試常考問題及答案匯總

經歷了無數的筆試面試之后&#xff0c;不知道大家有沒有發現FPGA的筆試面試還是有很多共通之處和規律可循的。所以一定要掌握筆試面試常考的問題。FPGA設計方向&#xff08;部分題目&#xff09;1. 什么是同步邏輯和異步邏輯&#xff1f;同步邏輯 是指在同一個時鐘信號的控制下…

從0開始的github學生認證并使用copilot教程(超詳細!)

目錄 一.注冊github賬號 1.1、僅僅是注冊 1.2、完善你的profile 二、Github 學生認證 郵箱 學校名稱 How do you plan to use Github? Upload Proof 學校具體信息 一.注冊github賬號 1.1、僅僅是注冊 1.用如QQ郵箱的第三方郵箱注冊github 再添加.edu結尾的教育郵箱&…

自動駕駛叉車與 WMS 集成技術方案:數據交互、協議適配與系統對接實現

自動駕駛叉車與倉庫管理系統&#xff08;WMS&#xff09;是現代物流自動化的核心。當這兩項技術協同工作時&#xff0c;倉庫將實現前所未有的效率、準確性和可擴展性。以下是利用其集成實現最佳效果的方法。 為何集成至關重要 倉庫管理在當今運營中扮演著至關重要的角色&…

“企業版維基百科”Confluence

“企業版維基百科”Confluence Confluence 是一款由澳大利亞公司 Atlassian 開發的企業級團隊協作與知識管理軟件。您可以把它理解為一個功能非常強大的 “企業版維基百科” 或 “團隊知識庫”。 它的核心目標是幫助團隊在一個統一的平臺上創建、共享、組織和討論項目文檔、會議…

QT去除顯示的紅色和黃色下劃線的辦法

在使用 Qt Creator 開發項目時,有時候會遇到這樣的情況: 代碼明明沒有錯誤,但編輯器里卻出現了紅色或黃色的下劃線提示,甚至讓人誤以為代碼有問題。其實,這通常是 Qt Creator 的代碼模型沒有及時更新 導致的,而不是項目本身的錯誤。 為什么會出現紅色和黃色下劃線? 紅…

域內的權限提升

CVE-2020-1472域內有一個服務&#xff1a;MS-NRPC&#xff08;建立與域控安全通道&#xff09;&#xff0c;可利用此漏洞獲取域管訪問權限。檢測這個漏洞能不能打&#xff0c;能打之后&#xff0c;將域控的機器hash置空&#xff0c;密碼為空&#xff0c;那么你就可以通過空的ha…

一鍵掌握服務器健康狀態與安全風險

一鍵掌握服務器健康狀態與安全風險 在服務器運維工作中,定期對系統進行全面檢查是保障服務穩定運行的關鍵環節。手動檢查不僅耗時費力,還容易遺漏關鍵指標。今天我將為大家介紹一款功能全面的系統綜合巡檢工具,只需一鍵運行,即可完成系統狀態、性能、安全等多維度檢查,并…