如何使用命令trap來捕捉信號
它有三種形式分別對應(yīng)三種不同的信號回應(yīng)方式。
第一種:
trap ""commands"" signal-list
當(dāng)腳本收到signal-list清單內(nèi)列出的信號時,trap命令執(zhí)行雙引號中的命令.
第二種:
trap signal-list
trap不指定任何命令,接受信號的默認(rèn)操作.默認(rèn)操作是結(jié)束進(jìn)程的運(yùn)行.
第三種:
trap "" "" signal-list
trap命令指定一個空命令串,允許忽視信號.
Linux信號簡介
1) SIGHUP 本信號在用戶終端連接(正常或非正常)結(jié)束時發(fā)出, 通常是在終端的控制進(jìn)程結(jié)束時, 通知同一session內(nèi)的各個作業(yè), 這時它們與控制終端不再關(guān)聯(lián).
2) SIGINT 程序終止(interrupt)信號, 在用戶鍵入INTR字符(通常是Ctrl-C)時發(fā)出
3) SIGQUIT 和SIGINT類似, 但由QUIT字符(通常是Ctrl-\)來控制. 進(jìn)程在因收到SIGQUIT退出時會產(chǎn)生core文件, 在這個意義上類似于一個程序錯誤信號.
4) SIGILL 執(zhí)行了非法指令. 通常是因為可執(zhí)行文件本身出現(xiàn)錯誤, 或者試圖執(zhí)行數(shù)據(jù)段. 堆棧溢出時也有可能產(chǎn)生這個信號.
5) SIGTRAP 由斷點指令或其它trap指令產(chǎn)生. 由debugger使用.
6) SIGABRT 程序自己發(fā)現(xiàn)錯誤并調(diào)用abort時產(chǎn)生.
7) SIGIOT 在PDP-11上由iot指令產(chǎn)生, 在其它機(jī)器上和SIGABRT一樣.
8) SIGBUS 非法地址, 包括內(nèi)存地址對齊(alignment)出錯. eg: 訪問一個四個字長的整數(shù), 但其地址不是4的倍數(shù).
9) SIGFPE 在發(fā)生致命的算術(shù)運(yùn)算錯誤時發(fā)出. 不僅包括浮點運(yùn)算錯誤, 還包括溢出及除數(shù)為0等其它所有的算術(shù)的錯誤.
10) SIGKILL 用來立即結(jié)束程序的運(yùn)行. 本信號不能被阻塞, 處理和忽略.
11) SIGUSR1 留給用戶使用
12) SIGSEGV 試圖訪問未分配給自己的內(nèi)存, 或試圖往沒有寫權(quán)限的內(nèi)存地址寫數(shù)據(jù).
13) SIGUSR2 留給用戶使用
14) SIGPIPE Broken pipe
15) SIGALRM 時鐘定時信號, 計算的是實際的時間或時鐘時間. alarm函數(shù)使用該信號.
16) SIGTERM 程序結(jié)束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理. 通常用來要求程序自己正常退出. shell命令kill缺省產(chǎn)生這個信號.
17) SIGCHLD 子進(jìn)程結(jié)束時, 父進(jìn)程會收到這個信號.
18) SIGCONT 讓一個停止(stopped)的進(jìn)程繼續(xù)執(zhí)行. 本信號不能被阻塞. 可以用一個handler來讓程序在由stopped狀態(tài)變?yōu)槔^續(xù)執(zhí)行時完成特定的工作. 例如, 重新顯示提示符
19) SIGSTOP 停止(stopped)進(jìn)程的執(zhí)行. 注意它和terminate以及interrupt的區(qū)別: 該進(jìn)程還未結(jié)束, 只是暫停執(zhí)行. 本信號不能被阻塞, 處理或忽略.
20) SIGTSTP 停止進(jìn)程的運(yùn)行, 但該信號可以被處理和忽略. 用戶鍵入SUSP字符時(通常是Ctrl-Z)發(fā)出這個信號
21) SIGTTIN 當(dāng)后臺作業(yè)要從用戶終端讀數(shù)據(jù)時, 該作業(yè)中的所有進(jìn)程會收到SIGTTIN信號. 缺省時這些進(jìn)程會停止執(zhí)行.
22) SIGTTOU 類似于SIGTTIN, 但在寫終端(或修改終端模式)時收到.
23) SIGURG 有緊急數(shù)據(jù)或out-of-band數(shù)據(jù)到達(dá)socket時產(chǎn)生.
24) SIGXCPU 超過CPU時間資源限制. 這個限制可以由getrlimit/setrlimit來讀取/改變
25) SIGXFSZ 超過文件大小資源限制.
26) SIGVTALRM 虛擬時鐘信號. 類似于SIGALRM, 但是計算的是該進(jìn)程占用的CPU時間.
27) SIGPROF 類似于SIGALRM/SIGVTALRM, 但包括該進(jìn)程用的CPU時間以及系統(tǒng)調(diào)用的時間.
28) SIGWINCH 窗口大小改變時發(fā)出.
29) SIGIO 文件描述符準(zhǔn)備就緒, 可以開始進(jìn)行輸入/輸出操作.
30) SIGPWR Power failure
【編輯推薦】