通俗易懂說訊號(4)Linux訊號列表及其詳解

2021-10-07 03:26:40 字數 3803 閱讀 7573

我們執行如下命令,可看到linux支援的訊號列表:

$ kill -l

sighup 2) sigint 3) sigquit 4) sigill

sigtrap 6) sigabrt 7) sigbus 8) sigfpe

sigkill 10) sigusr1 11) sigse** 12) sigusr2

sigpipe 14) sigalrm 15) sigterm 17) sigchld

sigcont 19) sigstop 20) sigtstp 21) sigttin

sigttou 23) sigurg 24) sigxcpu 25) sigxfsz

si**talrm 27) sigprof 28) sigwinch 29) sigio

sigpwr 31) sigsys 34) sigrtmin 35) sigrtmin+1

sigrtmin+2 37) sigrtmin+3 38) sigrtmin+4 39) sigrtmin+5

sigrtmin+6 41) sigrtmin+7 42) sigrtmin+8 43) sigrtmin+9

sigrtmin+10 45) sigrtmin+11 46) sigrtmin+12 47) sigrtmin+13

sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14 51) sigrtmax-13

sigrtmax-12 53) sigrtmax-11 54) sigrtmax-10 55) sigrtmax-9

sigrtmax-8 57) sigrtmax-7 58) sigrtmax-6 59) sigrtmax-5

sigrtmax-4 61) sigrtmax-3 62) sigrtmax-2 63) sigrtmax-1

sigrtmax

列表中,編號為1 ~ 31的訊號為傳統unix支援的訊號,是不可靠訊號(非實時的),編號為32 ~ 63的訊號是後來擴充的,稱做可靠訊號(實時訊號)。不可靠訊號和可靠訊號的區別在於前者不支援排隊,可能會造成訊號丟失,而後者不會。

下面我們對編號小於sigrtmin的訊號進行討論。

sighup

本訊號在使用者終端連線(正常或非正常)結束時發出, 通常是在終端的控制程序結束時, 通知同一session內的各個作業, 這時它們與控制終端不再關聯。

此外,對於與終端脫離關係的守護程序,這個訊號用於通知它重新讀取配置檔案。

sigint

程式終止(interrupt)訊號, 在使用者鍵入intr字元(通常是ctrl-c)時發出,用於通知前台程序組終止程序。

sigquit

和sigint類似, 但由quit字元(通常是ctrl-/)來控制. 程序在因收到sigquit退出時會產生core檔案, 在這個意義上類似於乙個程式錯誤訊號。

sigill

執行了非法指令. 通常是因為可執行檔案本身出現錯誤, 或者試圖執行資料段. 堆疊溢位時也有可能產生這個訊號。

sigtrap

由斷點指令或其它trap指令產生. 由debugger使用。

sigabrt

呼叫abort函式生成的訊號。

sigbus

非法位址, 包括記憶體位址對齊(alignment)出錯。比如訪問乙個四個字長的整數, 但其位址不是4的倍數。它與sigse**的區別在於後者是由於對合法儲存位址的非法訪問觸發的(如訪問不屬於自己儲存空間或唯讀儲存空間)。

sigfpe

在發生致命的算術運算錯誤時發出. 不僅包括浮點運算錯誤, 還包括溢位及除數為0等其它所有的算術的錯誤。

sigkill

用來立即結束程式的執行. 本訊號不能被阻塞、處理和忽略。如果管理員發現某個程序終止不了,可嘗試傳送這個訊號。

sigusr1

留給使用者使用

sigse**

試圖訪問未分配給自己的記憶體, 或試圖往沒有寫許可權的記憶體位址寫資料.

sigusr2

留給使用者使用

sigpipe

管道破裂。這個訊號通常在程序間通訊產生,比如採用fifo(管道)通訊的兩個程序,讀管道沒開啟或者意外終止就往管道寫,寫程序會收到sigpipe訊號。此外用socket通訊的兩個程序,寫程序在寫socket的時候,讀程序已經終止。

sigalrm

時鐘定時訊號, 計算的是實際的時間或時鐘時間. alarm函式使用該訊號.

sigterm

程式結束(terminate)訊號, 與sigkill不同的是該訊號可以被阻塞和處理。通常用來要求程式自己正常退出,shell命令kill預設產生這個訊號。如果程序終止不了,我們才會嘗試sigkill。

sigchld

子程序結束時, 父程序會收到這個訊號。

如果父程序沒有處理這個訊號,也沒有等待(wait)子程序,子程序雖然終止,但是還會在核心程序表中占有表項,這時的子程序稱為殭屍程序。這種情況我們應該避免(父程序或者忽略sigchild訊號,或者捕捉它,或者wait它派生的子程序,或者父程序先終止,這時子程序的終止自動由init程序來接管)。

sigcont

讓乙個停止(stopped)的程序繼續執行. 本訊號不能被阻塞. 可以用乙個handler來讓程式在由stopped狀態變為繼續執行時完成特定的工作. 例如, 重新顯示提示符

sigstop

停止(stopped)程序的執行. 注意它和terminate以及interrupt的區別:該程序還未結束, 只是暫停執行. 本訊號不能被阻塞, 處理或忽略.

sigtstp

停止程序的執行, 但該訊號可以被處理和忽略. 使用者鍵入susp字元時(通常是ctrl-z)發出這個訊號

sigttin

當後台作業要從使用者終端讀資料時, 該作業中的所有程序會收到sigttin訊號. 預設時這些程序會停止執行.

sigttou

類似於sigttin, 但在寫終端(或修改終端模式)時收到.

sigurg

有"緊急"資料或out-of-band資料到達socket時產生.

sigxcpu

超過cpu時間資源限制. 這個限制可以由getrlimit/setrlimit來讀取/改變。

sigxfsz

當程序企圖擴大檔案以至於超過檔案大小資源限制。

si**talrm

虛擬時鐘訊號. 類似於sigalrm, 但是計算的是該程序占用的cpu時間.

sigprof

類似於sigalrm/si**talrm, 但包括該程序用的cpu時間以及系統呼叫的時間.

sigwinch

視窗大小改變時發出.

sigio

檔案描述符準備就緒, 可以開始進行輸入/輸出操作.

sigpwr

power failure

sigsys

非法的系統呼叫。

在以上列出的訊號中,程式不可捕獲、阻塞或忽略的訊號有:sigkill,sigstop

不能恢復至預設動作的訊號有:sigill,sigtrap

缺省會導致程序流產的訊號有:sigabrt,sigbus,sigfpe,sigill,sigiot,sigquit,sigse**,sigtrap,sigxcpu,sigxfsz

缺省會導致程序退出的訊號有:sigalrm,sighup,sigint,sigkill,sigpipe,sigpoll,sigprof,sigsys,sigterm,sigusr1,sigusr2,si**talrm

缺省會導致程序停止的訊號有:sigstop,sigtstp,sigttin,sigttou

預設程序忽略的訊號有:sigchld,sigpwr,sigurg,sigwinch

此外,sigio在svr4是退出,在4.3bsd中是忽略;sigcont在程序掛起時是繼續,否則是忽略,不能被阻塞。

Socket是什麼,通俗易懂點說

網路由下往上分為 物理層 資料鏈路層 網路層 傳輸層 會話層 表現層 和 應用層。通過初步了解,我知道ip協議對應於網路層,tcp協議對應於傳輸層,而http協議對應於應用層。tcp ip協議是傳輸層協議,主要解決資料如何在網路中傳輸,而http協議是應用層協議,主要解決如何包裝資料。關於tcp i...

通俗易懂解剖jbpm4

本文主要對jbpm4進行乙個通俗 巨集觀的解析,涉及流程部署,流程定義,流程執行等基本概念,能讓你很輕鬆地了解jbpm的基本結構和使用方法。我們使用jbpm的一般步驟可以粗暴的分為 定義流程 部署流程定義 建立流程例項 執行流程 控制和監視流程 流程結束,歸檔流程 對歷史流程進行資料分析 優化和重組...

linux重啟tomcat命令(通俗易懂)

1 進入到tomcat的bin目錄 使用ls命令,檢視自己的目錄檔案 cd home cattsoft iona apache tomcat 7.0.82 bin cd 後面接自己的環境目錄 2 啟動tomcat 執行bin目錄下的啟動命令指令碼 sh startup.sh或者.startup.sh...