標籤:警示 操作 void 停止 體系 inux pre 語言 bsd
- 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)
C語言中的signal函數