使用命令trap來捕捉信號

它有三種形式分別對應三種不一樣的信號迴應方式.
第一種:
 trap ""commands"" signal-list
當腳本收到signal-list清單內列出的信號時,trap命令執行雙引號中的命令.shell

第二種:
 trap signal-list
trap不指定任何命令,接受信號的默認操做.默認操做是結束進程的運行.session

第三種:
 trap "" "" signal-list
trap命令指定一個空命令串,容許忽視信號. socket

Linux信號簡介 
1) SIGHUP 本信號在用戶終端鏈接(正常或非正常)結束時發出, 一般是在終端的控制進程結束時, 通知同一session內的各個做業, 這時它們與控制終端再也不關聯.   
2) SIGINT程序終止(interrupt)信號, 在用戶鍵入INTR字符(一般是Ctrl-C)時發出   
3) SIGQUIT 和SIGINT相似, 但由QUIT字符(一般是Ctrl-\)來控制. 進程在因收到SIGQUIT退出時會產生core文件, 在這個意義上相似於一個程序錯誤信號.   
4) SIGILL 執行了非法指令. 一般是由於可執行文件自己出現錯誤, 或者試圖執行數據段. 堆棧溢出時也有可能產生這個信號.   
5) SIGTRAP 由斷點指令或其它trap指令產生. 由debugger使用.   
6) SIGABRT 程序本身發現錯誤並調用abort時產生.   
7) SIGIOT在PDP-11上由iot指令產生, 在其它機器上和SIGABRT同樣.   
8) SIGBUS 非法地址, 包括內存地址對齊(alignment)出錯. eg: 訪問一個四個字長的整數, 但其地址不是4的倍數.   
9) SIGFPE 在發生致命的算術運算錯誤時發出. 不只包括浮點運算錯誤, 還包括溢出及除數爲0等其它全部的算術的錯誤.   
10) SIGKILL 用來當即結束程序的運行. 本信號不能被阻塞, 處理和忽略.   
11) SIGUSR1 留給用戶使用   
12) SIGSEGV 試圖訪問未分配給本身的內存, 或試圖往沒有寫權限的內存地址寫數據.   
13) SIGUSR2 留給用戶使用   
14) SIGPIPE Broken pipe   
15) SIGALRM 時鐘定時信號, 計算的是實際的時間或時鐘時間. alarm函數使用該信號.   
16) SIGTERM 程序結束(terminate)信號, 與SIGKILL不一樣的是該信號能夠被阻塞和處理. 一般用來要求程序本身正常退出. shell命令kill缺省產生這個信號.   
17) SIGCHLD 子進程結束時, 父進程會收到這個信號.   
18) SIGCONT 讓一箇中止(stopped)的進程繼續執行. 本信號不能被阻塞. 能夠用一個handler來讓程序在由stopped狀態變爲繼續執行時完成特定的工做. 例如, 從新顯示提示符   
19) SIGSTOP 中止(stopped)進程的執行. 注意它和terminate以及interrupt的區別: 該進程還未結束, 只是暫停執行. 本信號不能被阻塞, 處理或忽略.   
20) SIGTSTP 中止進程的運行, 但該信號能夠被處理和忽略. 用戶鍵入SUSP字符時(一般是Ctrl-Z)發出這個信號   
21) SIGTTIN 當後臺做業要從用戶終端讀數據時, 該做業中的全部進程會收到SIGTTIN信號. 缺省時這些進程會中止執行.   
22) SIGTTOU 相似於SIGTTIN, 但在寫終端(或修改終端模式)時收到.   
23) SIGURG有緊急數據或out-of-band數據到達socket時產生.   
24) SIGXCPU 超過CPU時間資源限制. 這個限制能夠由getrlimit/setrlimit來讀取/改變   
25) SIGXFSZ 超過文件大小資源限制.   
26) SIGVTALRM 虛擬時鐘信號. 相似於SIGALRM, 可是計算的是該進程佔用的CPU時間.   
27) SIGPROF 相似於SIGALRM/SIGVTALRM, 但包括該進程用的CPU時間以及系統調用的時間.   
28) SIGWINCH 窗口大小改變時發出.   
29) SIGIO 文件描述符準備就緒, 能夠開始進行輸入/輸出操做.   
30) SIGPWR Power failureide

相關文章
相關標籤/搜索