信號(1)

  • 信號是軟中斷,信號提供了一種異步處理事件的方法

  • 概念

    信號都被定義爲正整數常量,在頭文件signal.h中定義.
    不存在編號爲0的信號

  • 信號產生

    1. 用戶按某些終端鍵時,引發終端產生的信號。(ctrl+c產生SIGINT信號)
    2. 硬件異常產生信號(除數爲0,無效的內存訪問(產生SIGSEGV信號)等),這些條件有硬件檢測到,並通知內核。然後內核爲該條件發生時正在運行的進程產生適當的信號。
    3. 進程調用kill函數可以將任意信號發送給另一個進程或進程組。(接收信號的進程和發送信號的進程的所有者必須相同,或發送信號進程的所有者必須是超級用戶)
    4. kill命令發送信號,常用於終止一個失去控制的後臺進程
    5. 當檢測到某種軟件條件已經發生,並應將其通知有關進程時也產生信號。(如:SIGURG:在網絡連接上傳來帶外的數據;SIGPIPE:(在管道的讀進程終止後,一個進程寫此管道);SIGALARM:(進程所設置的定時器已經超時))
  • 信號產生時的處理

    1. 忽略 大多數信號可使用這種方式處理,但有2種信號不允許忽略處理(SIGKILL和SIGSTOP)
    2. 執行系統默認動作 大多數信號的系統默認動作是終止進程
    3. 捕捉處理 SIGKILL和SIGSTOP不能被捕捉
  • 信號列舉

信號 說明 描述 默認動作
SIGABRT 異常終止(abort) 調用abort()函數,進程異常終止 終止+core
SIGALRM 定時器超時(alarm) alarm()函數或者setitimer()函數超時 終止
SIGBUS 硬件故障 終止+core
SIGCANCEL 線程庫內部使用 忽略(linux無此信號)
SIGCHLD 子進程狀態改變 忽略
SIGCONT 使暫停進程繼續 繼續/忽略
SIGEMT 硬件故障 終止+core
SIGFPE 算術異常 終止+core
SIGHUP 連接點斷開 終止
SIGILL 非法硬件指令 終止+core
SIGINT 終端終端符 終止
SIGIO 異步IO 終止/忽略
SIGIOT 硬件故障 終止+core
SIGKILL 終止 終止
SIGPIPE 寫至無讀進程的管道 終止
SIGPOLL 可輪詢事件(poll) 終止
SIGPROF 梗概時間超時(setitimer) 終止
SIGPWR 電源失效/重啓 終止/忽略
SIGQUIT 終端退出符 終止+core
SIGSEGV 無效內存訪問 終止+core
SIGSTKFLT 協處理器棧故障 終止+core
SITSTOP 停止 停止進程
SIGSYS 無效系統調用 終止+core
SIGTERM 終止 終止
SIGTRAP 硬件故障 終止+core
SIGTSTP 終端停止符 停止進程
SIGTTIN 後臺讀控制tty 停止進程
SIGTTOU 後臺寫向控制tty 停止進程
SIGURG 緊急情況(套接字) 忽略
SIGUSR1 用戶定義信號 終止
SIGUSR2 用戶定義信號 終止
SIGVTALRM 虛擬時間鬧鐘 終止
SIGWINCH 窗口大小改變 忽略
SIGXCPU 超過cpu限制(setrlimit) 終止+core
SIGXFSZ 超過文件長度限制(setrlimit) 終止+core
SIGXRES 超過資源限制 忽略
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章