博客專欄

        EEPW首頁 > 博客 > 嵌入式Linux:常見信號的默認行為

        嵌入式Linux:常見信號的默認行為

        發布人:美男子玩編程 時間:2024-09-25 來源:工程師 發布文章

        信號是一種軟件中斷,用于通知進程發生了某種異步事件。信號可以由用戶、其他進程或操作系統內核產生。進程可以選擇捕獲并處理這些信號,或者忽略它們,讓系統執行默認操作。



        • 不可靠信號(非實時信號)編號為 1~31 的信號。它們的行為可能因實現而異,特別是在信號被阻塞或忽略的情況下。如果多個相同的不可靠信號在短時間內連續到達,它們可能會合并成一個信號。

        • 可靠信號(實時信號)編號為 34~64 的信號。它們的行為在所有 POSIX 兼容的系統上都是相同的。可靠信號不會合并,即使它們在短時間內連續到達。可靠信號支持排隊,這意味著如果一個可靠信號被阻塞,它將被存儲在隊列中,直到信號處理程序準備就緒。

        常見信號的用途和系統默認操作如下:



        SIGINT (2)

        • 觸發方式:當用戶在終端按下中斷字符(通常是CTRL+C)。

        • 默認操作:終止進程。

        • 描述:用于中斷正在運行的前臺進程,是常用的終止命令。


        SIGQUIT (3)

        • 觸發方式:當用戶在終端按下退出字符(通常是CTRL+)。

        • 默認操作:終止進程并生成核心轉儲文件。

        • 描述:用于在程序進入無限循環或不響應時終止進程,并生成調試用的核心文件。


        SIGILL (4)

        • 觸發方式:進程嘗試執行非法的機器語言指令。

        • 默認操作:終止進程。

        • 描述:用于指示程序執行了無效的操作碼,通常表示程序代碼損壞或內存越界。


        SIGABRT (6)

        • 觸發方式:當進程調用abort()系統調用。

        • 默認操作:終止進程并生成核心轉儲文件。

        • 描述:用于指示進程自身發現了嚴重錯誤,并請求自我終止。


        SIGBUS (7)

        • 觸發方式:發生總線錯誤(例如錯誤的內存訪問)。

        • 默認操作:終止進程。

        • 描述:指示內存訪問沖突,通常與硬件有關。


        SIGFPE (8)

        • 觸發方式:特定類型的算術錯誤(例如除以零)。

        • 默認操作:終止進程。

        • 描述:用于表示浮點運算錯誤或其他算術異常。


        SIGKILL (9)

        • 觸發方式:通過kill -9命令或系統直接發送。

        • 默認操作:立即終止進程。

        • 描述:是無法被捕獲或忽略的“必殺”信號,用于強制終止進程。


        SIGUSR1 (10)

        • 觸發方式:用戶定義的信號,供程序員自定義使用。

        • 默認操作:終止進程。

        • 描述:用戶程序可以使用此信號進行進程間通信或事件通知。


        SIGSEGV (11)

        • 觸發方式:進程嘗試訪問無效的內存地址。

        • 默認操作:終止進程。

        • 描述:常見于指針錯誤或無效內存訪問操作,通常會導致程序崩潰。


        SIGUSR2 (12)

        • 觸發方式:與SIGUSR1類似,供用戶自定義使用。

        • 默認操作:終止進程。

        • 描述:供程序員自定義,用于進程間通信或自定義處理邏輯。


        SIGPIPE (13)

        • 觸發方式:進程向已關閉的管道或套接字寫入數據。

        • 默認操作:終止進程。

        • 描述:當嘗試向無效的通信通道寫入數據時觸發,通常用于通知進程通信失敗。


        SIGALRM (14)

        • 觸發方式:定時器到期(由alarm()或setitimer()設置)。

        • 默認操作:終止進程。

        • 描述:常用于定時操作,信號觸發后通常終止程序或進行某種處理。


        SIGTERM (15)

        • 觸發方式:通過kill命令(不帶-9選項)。

        • 默認操作:終止進程。

        • 描述:用于請求進程正常終止,通常用于優雅地關閉應用程序。


        SIGCHLD (17)

        • 觸發方式:子進程終止或狀態改變。

        • 默認操作:忽略信號。

        • 描述:父進程用來得知子進程終止或狀態改變,默認忽略,父進程可選擇處理。


        SIGCONT (18)

        • 觸發方式:恢復已停止的進程。

        • 默認操作:繼續運行進程。

        • 描述:發送給已停止的進程,使其恢復執行。


        SIGSTOP (19)

        • 觸發方式:強制停止進程。

        • 默認操作:停止進程。

        • 描述:無法捕獲或忽略的“必停”信號,用于暫停進程執行。


        SIGTSTP (20)

        • 觸發方式:用戶在終端按下停止字符(CTRL+Z)。

        • 默認操作:停止進程。

        • 描述:用于暫停前臺進程組中的進程,常用于暫停任務。


        SIGXCPU (24)

        • 觸發方式:進程CPU時間超出限制。

        • 默認操作:終止進程。

        • 描述:通常用于檢測進程占用CPU過多時間,可能引發警告或終止進程。


        SIGVTALRM (26)

        • 觸發方式:虛擬定時器到期(由setitimer()設置)。

        • 默認操作:終止進程。

        • 描述:用于虛擬定時器管理,定時器到期后觸發信號。


        SIGWINCH (28)

        • 觸發方式:終端窗口大小改變。

        • 默認操作:忽略信號。

        • 描述:當終端窗口調整大小時,前臺進程會接收到此信號。


        SIGPOLL/SIGIO (29)

        • 觸發方式:異步I/O事件發生。

        • 默認操作:終止進程。

        • 描述:用于異步I/O操作,通知進程文件描述符的I/O事件。


        SIGSYS (31)

        • 觸發方式:進程發起了無效的系統調用。

        • 默認操作:終止進程。

        • 描述:通常用于捕獲非法系統調用或程序錯誤。


        這些信號為Linux進程提供了豐富的控制和通信機制。了解這些信號及其默認行為,有助于編寫更加健壯的程序,并能夠有效處理各種異常和中斷。


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



        關鍵詞: 嵌入式 Linux

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 平罗县| 西乌珠穆沁旗| 东乡| 朝阳市| 永济市| 崇左市| 新竹县| 湖口县| 南宁市| 嘉义市| 鲜城| 桓台县| 汉川市| 清远市| 望城县| 庄浪县| 壶关县| 温州市| 宁河县| 北京市| 甘孜县| 湘潭县| 哈尔滨市| 鄂托克前旗| 抚松县| 灌云县| 山丹县| 孟州市| 扎鲁特旗| 台安县| 和平县| 杂多县| 浠水县| 垣曲县| 苍梧县| 合水县| 台前县| 册亨县| 弥渡县| 民乐县| 康乐县|