久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

專欄中心

EEPW首頁 > 專欄 > Linux信號機制與信號處理分享

Linux信號機制與信號處理分享

發布人:only1 時間:2020-08-20 來源:工程師 發布文章

今天扣丁學堂小編給大家整理一下關于Linux信號機制與信號處理的詳細介紹,首先信號(signal)是Linux進程間通信的一種機制,全稱為軟中斷信號,也被稱為軟中斷。信號本質上是在軟件層次上對硬件中斷機制的一種模擬。 

 

與其他進程間通信方式(例如管道、共享內存等)相比,信號所能傳遞的信息比較少,只是一個整數。信號只是用來通知某進程發生了什么事件,并不給該進程傳遞任何數據。但正是由于傳遞的信息量少,信號也便于管理和使用,可以用于系統管理相關的任務,例如通知進程終結、中止或者恢復等。  

每種信號用一個整型常量宏表示,以SIG開頭,比如SIGCHLD、SIGINT等,它們在系統頭文件中定義。  

信號由內核(kernel)管理,產生方式多種多樣:  

可以由內核自身產生,比如出現硬件錯誤、內存讀取錯誤,分母為0的除法等,內核需要通知相應進程。  

也可以由其他進程產生并發送給內核,再由內核傳遞給目標進程。  

信號傳遞的過程  

內核中針對每一個進程都有一個表來保存信號。  

當內核需要將信號傳遞給某個進程時,就在該進程對應的表中寫入信號,這樣就生成了信號。  

當該進程由用戶態陷入內核態,再次切換到用戶態之前,會查看表中的信號。如果有信號,進程就會首先執行信號對應的操作,此時叫做執行信號。  

從生成信號到將信號傳遞給對應進程這段時間,信號處于等待狀態。  

我們可以編寫代碼,讓進程阻塞(block)某些信號,也就是讓這些信號始終處于等待的狀態,直到進程取消阻塞(unblock)或者忽略信號。  

一些常見信號  

SIGHUP1終端掛起或控制進程終止。當用戶退出Shell時,由該進程啟動的所有進程都會收到這個信號,默認動作為終止進程。  

SIGINT2鍵盤中斷。當用戶按下組合鍵時,用戶終端向正在運行中的由該終端啟動的程序發出此信號。默認動作為終止進程。  

SIGQUIT3鍵盤退出鍵被按下。當用戶按下或組合鍵時,用戶終端向正在運行中的由該終端啟動的程序發出此信號。默認動作為退出程序。  

SIGILL4非法指令  

SIGABRT6由abort(3)發出的退出指令  

SIGFPE8發生致命的運算錯誤時發出。不僅包括浮點運算錯誤,還包括溢出及除數為0等所有的算法錯誤。默認動作為終止進程并產生core文件。  

SIGKILL9無條件終止進程。進程接收到該信號會立即終止,不進行清理和暫存工作。該信號不能被忽略、處理和阻塞,它向系統管理員提供了可以殺死任何進程的方法。  

SIGSEGV11無效的內存引用  

SIGALRM14定時器超時,默認動作為終止進程。  

SIGTERM15程序結束信號,可以由kill命令產生。與SIGKILL不同的是,SIGTERM信號可以被阻塞和終止,以便程序在退出前可以保存工作或清理臨時文件等。  

使用實例  

通過kill-l命令可以查看系統支持的所有信號:  

$kill-l  

1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL  

5)SIGTRAP6)SIGABRT7)SIGBUS8)SIGFPE  

9)SIGKILL10)SIGUSR111)SIGSEGV12)SIGUSR2  

13)SIGPIPE14)SIGALRM15)SIGTERM17)SIGCHLD  

18)SIGCONT19)SIGSTOP20)SIGTSTP21)SIGTTIN  

22)SIGTTOU23)SIGURG24)SIGXCPU25)SIGXFSZ  

26)SIGVTALRM27)SIGPROF28)SIGWINCH29)SIGIO  

30)SIGPWR31)SIGSYS34)SIGRTMIN35)SIGRTMIN+1  

36)SIGRTMIN+237)SIGRTMIN+338)SIGRTMIN+439)SIGRTMIN+5  

40)SIGRTMIN+641)SIGRTMIN+742)SIGRTMIN+843)SIGRTMIN+9  

44)SIGRTMIN+1045)SIGRTMIN+1146)SIGRTMIN+1247)SIGRTMIN+13  

48)SIGRTMIN+1449)SIGRTMIN+1550)SIGRTMAX-1451)SIGRTMAX-13  

52)SIGRTMAX-1253)SIGRTMAX-1154)SIGRTMAX-1055)SIGRTMAX-9  

56)SIGRTMAX-857)SIGRTMAX-758)SIGRTMAX-659)SIGRTMAX-5  

60)SIGRTMAX-461)SIGRTMAX-362)SIGRTMAX-263)SIGRTMAX-1  

64)SIGRTMAX  

注意:上面是在CentOS下的命令執行結果,不同的Linux發行版支持的信號可能不同。  

每種信號都會有一個默認動作。默認動作就是腳本或程序接收到該信號所做出的默認操作。常見的默認動作有終止進程、退出程序、忽略信號、重啟暫停的進程等,上表中也對部分默認動作進行了說明。  

發送信號  

有多種方式可以向程序或腳本發送信號,例如按下組合鍵會發送SIGINT信號,終止當前進程。  

還可以通過kill命令發送信號,語法為:  

$kill-signalpid  

signal為要發送的信號,可以是信號名稱或數字;pid為接收信號的進程ID。例如:  

$kill-135365  

將SIGHUP信號發送給進程ID為35365的進程,程序會終止執行。  

強制殺死ID為35365的進程:  

$kill-935365  

捕獲信號  

通常情況下,直接終止進程并不是我們所希望的。例如,按下,進程被立即終止,不會清理創建的臨時文件,帶來系統垃圾,也不會保存正在進行的工作,導致需要重做。  

可以通過編程來捕獲這些信號,當終止信號出現時,可以先進行清場和保存處理,再退出程序。  

通過trap命令就可以捕獲信號,語法為:  

$trapcommandssignals  

commands為Linux系統命令或用戶自定義命令;signals為要捕獲的信號,可以為信號名稱或數字。  

捕獲到信號后,可以有三種處理:  

執行一段腳本來做一些處理工作,例如清理臨時文件;  

接受(恢復)信號的默認操作;  

忽略當前信號。  

a.清理臨時文件  

腳本捕獲到終止信號后一個常見的動作就是清理臨時文件。例如:  

$trap"rm-f$WORKDIR/tmp$$$WORKDIR/tmpTest$$;exit"2  

當用戶按下后,腳本先清理臨時文件tmp$$和tmpTest$$再退出。  

注意:exit命令是必須的,否則腳本捕獲到信號后會繼續執行而不是退出。  

修改上面的腳本,使接收到SIGHUP時進行同樣的操作:  

$trap"rm$WORKDIR/tmp$$$WORKDIR/tmpTest$$;exit"12  

幾點注意:  

如果執行多個命令,需要將命令用引號包圍;  

只有腳本執行到trap命令時才會捕獲信號;  

再次接收到信號時還會執行同樣的操作。  

上面的腳本,執行到trap命令時就會替換WORKDIR和$$的值。如果希望接收到SIGHUP或SIGINT信號時再替換其值,那么可以將命令放在單引號內,例如:  

$trap'rm$WORKDIR/tmp$$$WORKDIR/tmpTest$$;exit'12  

b.忽略信號  

如果trap命令的commands為空,將會忽略接收到的信號,即不做任何處理,也不執行默認動作。例如:  

$trap''2  

也可以同時忽略多個信號:  

$trap''12315  

注意:必須被引號包圍,不能寫成下面的形式:  

$trap2  

c.恢復默認動作  

如果希望改變信號的默認動作后再次恢復默認動作,那么省略trap命令的commands即可,例如:  

$trap12  

將恢復SIGHUP和SIGINT信號的默認動作。  

以上就是關于Linux信號機制與信號處理的詳細介紹,最后扣丁學堂的Linux培訓課程從基礎入門開始教,不論學員是否擁有基礎在扣丁學堂都能順利的學習,扣丁學堂不僅有專業的老師和與時俱進的課程體系,還有大量的Linux視頻教程供學員觀看學習,想要學好Linux開發的小伙伴快快行動吧。扣丁學堂Linux技術交流群:659974587。


*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

關鍵詞:

相關推薦

現代化交流電網以實現未來穩定

Intersil公司2010年路演武漢站講座1--通信電源解決方案

視頻 2011-10-18

單片機器件應用手冊

PIC系列單片機原理和程序設計

使用源開關SiC JFET的反激變換器設計AND90330/D

美國計劃自1970年代以來最大規模的核能項目

單片機實用開發指南

環境能源管理器處理兩種能量收集源

電網級的泡泡電池很快就會普及

我們現在知道火星上的時鐘會快得多

MCS-51單片機開發系統與監控分析

Intersil公司2010年路演武漢站講座4--用于儀器及工業應用的高性能模擬信號鏈產品

視頻 2011-10-18

MCS-51單片機應用設計

Intersil公司2010年路演武漢站講座7--車載信息娛樂系統

視頻 2011-10-18

2026內存危機:手機電腦漲價,竟因AI搶走了所有芯片?

這個AI能在石頭剪刀布上打敗你:儲層計算芯片提供快速且低功耗的預測

Intersil公司2010年路演武漢站講座5--離線式LED照明驅動方案

Intersil公司2010年路演武漢站講座6--無線基礎設施應用解決方案

視頻 2011-10-18

虛擬同步機可以幫助穩定電網

電源與新能源 2025-12-22

我們會在看到通用人工智能時認出它嗎?

智能計算 2025-12-22
更多 培訓課堂
更多 焦點
更多 視頻

技術專區