近期接觸了Linux平臺的測試,遇到了軟件發生異常,從而接觸到了 Linux平臺下的Signal——信號,用來通知進程發生了異步事件。程序員
做爲測試,免不了須要初步判斷一下是不是正在的異常,所以學習了一下Signal微信
NO異步
1svg
信號事件的發生有兩個來源:
函數
硬件來源(好比咱們按下了鍵盤或者其它硬件故障);學習
軟件來源,最經常使用發送信號的系統函數是kill, raise, alarm和setitimer以及sigqueue函數,軟件來源還包括一些非法運算等操做。測試
按發出信號的緣由簡單分類,以下:flex
(1) 與進程終止相關的信號。spa
當進程退出,或者子進程終止時,發出這類信號。.net
(2) 與進程例外事件相關的信號。
如進程越界,或企圖寫一個只讀的內存區域(如程序正文區),或執行一個特權指令及其餘各類硬件錯誤。
(3) 與在系統調用期間遇到不可恢復條件相關的信號。
如執行系統調用exec時,原有資源已經釋放,而目前系統資源又已經耗盡。
(4) 與執行系統調用時遇到非預測錯誤條件相關的信號。
如執行一個並不存在的系統調用。
(5) 在用戶態下的進程發出的信號。
如進程調用系統調用kill向其餘進程發送信號。
(6) 與終端交互相關的信號。
如用戶關閉一個終端,或按下break鍵等狀況。
(7) 跟蹤進程執行的信號。
NO
2
Linux支持的信號列表以下(不少信號是與機器的體系結構相關的)
信號值 默認處理動做 發出信號的緣由
SIGHUP 1 A 終端掛起或者控制進程終止
SIGINT 2 A 鍵盤中斷(如break鍵被按下)
SIGQUIT 3 C 鍵盤的退出鍵被按下
SIGILL 4 C 非法指令
SIGABRT 6 C 由abort(3)發出的退出指令
SIGFPE 8 C 浮點異常
SIGKILL 9 AEF Kill信號
SIGSEGV 11 C 無效的內存引用
SIGPIPE 13 A 管道破裂:寫一個沒有讀端口的管道
SIGALRM 14 A 由alarm(2)發出的信號
SIGTERM 15 A 終止信號
處理動做一項中的字母含義以下
A 缺省的動做是終止進程
C 缺省的動做是終止進程並進行內核映像轉儲(dump core),內核映像轉儲是指將進程數據在內存的映像和進程在內核結構中的部份內容以必定格式轉儲到文件系統,而且進程退出執行,這樣作的好處是爲程序員提供了方便,使得他們能夠獲得進程當時執行時的數據值,容許他們肯定轉儲的緣由,而且能夠調試他們的程序。
E 信號不能被捕獲
F 信號不能被忽略
瞭解了以上信息後,再來看軟件生成異常的log文件,其餘的信息能夠暫時不關注,將log信息中的Signal字段找出來,解讀後面的數值
未了解以前:
跟開發瞭解了軟件在出現異常時會寫log,所以實時關注log的狀況,生成log後就給開發提交bug
瞭解以後:
在生成的log中,不少的信號都是因一些操做產生的,如
1和15,在註銷系統後就會產生;
9,測試的操做中常常會有kill進程的操做,log中的這些信號能夠直接忽略
11是常常出現且須要重點關注的信號,遇到這個數字千萬要放過
6和14,遇到這個信號也千萬不要忽略,須要找開發進行分析討論的喲,它多是問題,固然,也可能不是問題
其餘的信號,目前位置沒有遇到過
以上簡單分享了Linux下的Signal的含義,以及一些經常使用的信號值,後續還會繼續有分享喲
本文分享自微信公衆號 - 搜狗測試(SogouQA)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。