c語(yǔ)言signal函數(shù)的應(yīng)用?
signal是一個(gè)系統(tǒng)調(diào)用。是一種特殊的中斷,當(dāng)某種特定的“軟件中斷”發(fā)生時(shí)。用于調(diào)用的程序。中斷通常是程序運(yùn)行中出現(xiàn)的特殊情況,如引用特殊內(nèi)存中的非法地址, 浮點(diǎn)數(shù)被0除。
signal()的原型為:
#include <signal.h>
void(*signal(int hum,void(*func)(int)))(int)。
signal中的int參數(shù)及其含義
SIGHUP 1 A 終端掛起或者控制進(jìn)程終止
SIGINT 2 A 鍵盤中斷(如break鍵被按下)
SIGQU99v 3 C 鍵盤的退出鍵被按下
SIGILL 4 C 非法指令
SIGABRT 6 C 由abort(3)發(fā)出的退出指令
SIGFPE 8 C 浮點(diǎn)異常
SIGKILL 9 AEF Kill信號(hào)
SIGSEGV 11 C 無(wú)效的內(nèi)存引用
SIGPIPE 13 A 管道破裂: 寫一個(gè)沒有讀port的管道
SIGALRM 14 A 由alarm(2)發(fā)出的信號(hào)
SIGTERM 15 A 終止信號(hào)
SIGUSR1 30,10,16 A 用戶自己定義信號(hào)1
SIGUSR2 31,12,17 A 用戶自己定義信號(hào)2
SIGCHLD 20,17,18 B 子進(jìn)程結(jié)束信號(hào)
SIGCONT 19,18,25 進(jìn)程繼續(xù)(曾被停止的進(jìn)程)
SIGSTOP 17,19,23 DEF 終止進(jìn)程
SIGTSTP 18,20,24 D 控制終端(tty)上按下停止鍵
SIGTTIN 21,21,26 D 后臺(tái)進(jìn)程企圖從控制終端讀
SIGTTOU 22,22,27 D 后臺(tái)進(jìn)程企圖從控制終端寫
以下的信號(hào)沒在POSIX.1中列出,而在SUSv2列出
SIGBUS 10,7,10 C 總線錯(cuò)誤(錯(cuò)誤的內(nèi)存訪問(wèn))
SIGPOLL A Sys V定義的Pollable事件,與SIGIO同義
SIGPROF 27,27,29 A Profiling定時(shí)器到
SIGSYS 12,-,12 C 無(wú)效的系統(tǒng)調(diào)用 (SVID)
SIGTRAP 5 C 跟蹤/斷點(diǎn)捕獲
SIGURG 16,23,21 B Socket出現(xiàn)緊急條件(4.2 BSD)
SIGVTALRM 26,26,28 A 實(shí)際時(shí)間報(bào)警時(shí)鐘信號(hào)(4.2 BSD)
SIGXCPU 24,24,30 C 超出設(shè)定的CPU時(shí)間限制(4.2 BSD)
SIGXFSZ 25,25,31 C 超出設(shè)定的文件限制大小(4.2 BSD)
(對(duì)于SIGSYS。SIGXCPU。SIGXFSZ。以及某些機(jī)器體系結(jié)構(gòu)下的SIGBUS,Linux缺省的動(dòng)作是A (terminate),SUSv2 是C (terminate and dump core))。
以下是其他的一些信號(hào)
信號(hào) 值 處理動(dòng)作 發(fā)出信號(hào)的原因
SIGIOT 6 C IO捕獲指令,與SIGABRT同義
SIGEMT 7,-,7
SIGSTKFLT -,16,- A 協(xié)處理器堆棧錯(cuò)誤
SIGIO 23,29,22 A 某I/O操作如今能夠進(jìn)行了(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 未使用的信號(hào)(will be SIGSYS)