常用命令:如何使用命令trap來(lái)捕捉信號(hào)

字號(hào):

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