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