C語言中的signal函數


  • signal是一個系統調用。是一種特殊的中斷,當某種特定的“軟件中斷”發生時。用於調用的程序。中斷通常是程序運行中出現的特殊情況,如引用特殊內存中的非法地址, 浮點數被0除。

  • signal()的原型為:
    #include <signal.h>
    void(*signal(int hum,void(*func)(int)))(int)。

  • signal中的int參數及其含義
    SIGHUP 1 A 終端掛起或者控制進程終止
    SIGINT 2 A 鍵盤中斷(如break鍵被按下)
    SIGQU99v 3 C 鍵盤的退出鍵被按下
    SIGILL 4 C 非法指令
    SIGABRT 6 C 由abort(3)發出的退出指令
    SIGFPE 8 C 浮點異常
    SIGKILL 9 AEF Kill信號
    SIGSEGV 11 C 無效的內存引用
    SIGPIPE 13 A 管道破裂: 寫一個沒有讀port的管道
    SIGALRM 14 A 由alarm(2)發出的信號
    SIGTERM 15 A 終止信號
    SIGUSR1 30,10,16 A 用戶自己定義信號1
    SIGUSR2 31,12,17 A 用戶自己定義信號2
    SIGCHLD 20,17,18 B 子進程結束信號
    SIGCONT 19,18,25 進程繼續(曾被停止的進程)
    SIGSTOP 17,19,23 DEF 終止進程
    SIGTSTP 18,20,24 D 控制終端(tty)上按下停止鍵
    SIGTTIN 21,21,26 D 后台進程企圖從控制終端讀
    SIGTTOU 22,22,27 D 后台進程企圖從控制終端寫

以下的信號沒在POSIX.1中列出,而在SUSv2列出

SIGBUS 10,7,10 C 總線錯誤(錯誤的內存訪問)
SIGPOLL A Sys V定義的Pollable事件,與SIGIO同義
SIGPROF 27,27,29 A Profiling定時器到
SIGSYS 12,-,12 C 無效的系統調用 (SVID)
SIGTRAP 5 C 跟蹤/斷點捕獲
SIGURG 16,23,21 B Socket出現緊急條件(4.2 BSD)
SIGVTALRM 26,26,28 A 實際時間報警時鍾信號(4.2 BSD)
SIGXCPU 24,24,30 C 超出設定的CPU時間限制(4.2 BSD)
SIGXFSZ 25,25,31 C 超出設定的文件限制大小(4.2 BSD)

(對於SIGSYS。SIGXCPU。SIGXFSZ。以及某些機器體系結構下的SIGBUS,Linux缺省的動作是A (terminate),SUSv2 是C (terminate and dump core))。

以下是其他的一些信號

信號 值 處理動作 發出信號的原因

SIGIOT 6 C IO捕獲指令,與SIGABRT同義
SIGEMT 7,-,7
SIGSTKFLT -,16,- A 協處理器堆棧錯誤
SIGIO 23,29,22 A 某I/O操作如今能夠進行了(4.2 BSD)
SIGCLD -,-,18 A 與SIGCHLD同義
SIGPWR 29,30,19 A 電源故障(System V)
SIGINFO 29,-,- A 與SIGPWR同義
SIGLOST -,-,- A 文件鎖丟失
SIGWINCH 28,28,20 B 窗體大小改變(4.3 BSD, Sun)
SIGUNUSED -,31,- A 未使用的信號(will be SIGSYS)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM