嵌入式Linux:常見信號的默認行為
信號是一種軟件中斷,用于通知進程發(fā)生了某種異步事件。信號可以由用戶、其他進程或操作系統內核產生。進程可以選擇捕獲并處理這些信號,或者忽略它們,讓系統執(zhí)行默認操作。
不可靠信號(非實時信號):編號為 1~31 的信號。它們的行為可能因實現而異,特別是在信號被阻塞或忽略的情況下。如果多個相同的不可靠信號在短時間內連續(xù)到達,它們可能會合并成一個信號。
可靠信號(實時信號):編號為 34~64 的信號。它們的行為在所有 POSIX 兼容的系統上都是相同的。可靠信號不會合并,即使它們在短時間內連續(xù)到達。可靠信號支持排隊,這意味著如果一個可靠信號被阻塞,它將被存儲在隊列中,直到信號處理程序準備就緒。
常見信號的用途和系統默認操作如下:
SIGINT (2)
觸發(fā)方式:當用戶在終端按下中斷字符(通常是CTRL+C)。
默認操作:終止進程。
描述:用于中斷正在運行的前臺進程,是常用的終止命令。
SIGQUIT (3)
觸發(fā)方式:當用戶在終端按下退出字符(通常是CTRL+)。
默認操作:終止進程并生成核心轉儲文件。
描述:用于在程序進入無限循環(huán)或不響應時終止進程,并生成調試用的核心文件。
SIGILL (4)
觸發(fā)方式:進程嘗試執(zhí)行非法的機器語言指令。
默認操作:終止進程。
描述:用于指示程序執(zhí)行了無效的操作碼,通常表示程序代碼損壞或內存越界。
SIGABRT (6)
觸發(fā)方式:當進程調用abort()系統調用。
默認操作:終止進程并生成核心轉儲文件。
描述:用于指示進程自身發(fā)現了嚴重錯誤,并請求自我終止。
SIGBUS (7)
觸發(fā)方式:發(fā)生總線錯誤(例如錯誤的內存訪問)。
默認操作:終止進程。
描述:指示內存訪問沖突,通常與硬件有關。
SIGFPE (8)
觸發(fā)方式:特定類型的算術錯誤(例如除以零)。
默認操作:終止進程。
描述:用于表示浮點運算錯誤或其他算術異常。
SIGKILL (9)
觸發(fā)方式:通過kill -9命令或系統直接發(fā)送。
默認操作:立即終止進程。
描述:是無法被捕獲或忽略的“必殺”信號,用于強制終止進程。
SIGUSR1 (10)
觸發(fā)方式:用戶定義的信號,供程序員自定義使用。
默認操作:終止進程。
描述:用戶程序可以使用此信號進行進程間通信或事件通知。
SIGSEGV (11)
觸發(fā)方式:進程嘗試訪問無效的內存地址。
默認操作:終止進程。
描述:常見于指針錯誤或無效內存訪問操作,通常會導致程序崩潰。
SIGUSR2 (12)
觸發(fā)方式:與SIGUSR1類似,供用戶自定義使用。
默認操作:終止進程。
描述:供程序員自定義,用于進程間通信或自定義處理邏輯。
SIGPIPE (13)
觸發(fā)方式:進程向已關閉的管道或套接字寫入數據。
默認操作:終止進程。
描述:當嘗試向無效的通信通道寫入數據時觸發(fā),通常用于通知進程通信失敗。
SIGALRM (14)
觸發(fā)方式:定時器到期(由alarm()或setitimer()設置)。
默認操作:終止進程。
描述:常用于定時操作,信號觸發(fā)后通常終止程序或進行某種處理。
SIGTERM (15)
觸發(fā)方式:通過kill命令(不帶-9選項)。
默認操作:終止進程。
描述:用于請求進程正常終止,通常用于優(yōu)雅地關閉應用程序。
SIGCHLD (17)
觸發(fā)方式:子進程終止或狀態(tài)改變。
默認操作:忽略信號。
描述:父進程用來得知子進程終止或狀態(tài)改變,默認忽略,父進程可選擇處理。
SIGCONT (18)
觸發(fā)方式:恢復已停止的進程。
默認操作:繼續(xù)運行進程。
描述:發(fā)送給已停止的進程,使其恢復執(zhí)行。
SIGSTOP (19)
觸發(fā)方式:強制停止進程。
默認操作:停止進程。
描述:無法捕獲或忽略的“必?!毙盘?,用于暫停進程執(zhí)行。
SIGTSTP (20)
觸發(fā)方式:用戶在終端按下停止字符(CTRL+Z)。
默認操作:停止進程。
描述:用于暫停前臺進程組中的進程,常用于暫停任務。
SIGXCPU (24)
觸發(fā)方式:進程CPU時間超出限制。
默認操作:終止進程。
描述:通常用于檢測進程占用CPU過多時間,可能引發(fā)警告或終止進程。
SIGVTALRM (26)
觸發(fā)方式:虛擬定時器到期(由setitimer()設置)。
默認操作:終止進程。
描述:用于虛擬定時器管理,定時器到期后觸發(fā)信號。
SIGWINCH (28)
觸發(fā)方式:終端窗口大小改變。
默認操作:忽略信號。
描述:當終端窗口調整大小時,前臺進程會接收到此信號。
SIGPOLL/SIGIO (29)
觸發(fā)方式:異步I/O事件發(fā)生。
默認操作:終止進程。
描述:用于異步I/O操作,通知進程文件描述符的I/O事件。
SIGSYS (31)
觸發(fā)方式:進程發(fā)起了無效的系統調用。
默認操作:終止進程。
描述:通常用于捕獲非法系統調用或程序錯誤。
這些信號為Linux進程提供了豐富的控制和通信機制。了解這些信號及其默認行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。
*博客內容為網友個人發(fā)布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。