<span id="vexk9"><table id="vexk9"></table></span>

      trap

      捕捉信號和其他事件并執行命令。

      概要

      trap [-lp] [[arg] signal_spec ...]
      

      主要用途

      選項

      -l    打印信號名稱以及信號名稱對應的數字。
      -p    顯示與每個信號關聯的trap命令。
      

      參數

      arg:接收到信號時執行的命令。

      signal_spec:信號名稱或信號名稱對應的數字。

      返回值

      如果表達式執行結果為成功時返回0,當參數 signal_spec 沒有指定有效值時返回1。

      關于信號

      信號是一種進程間通信機制,它給應用程序提供一種異步的軟件中斷,使應用程序有機會接受其他程序活終端發送的命令(即信號)。應用程序收到信號后,有三種處理方式:忽略,默認,或捕捉。進程收到一個信號后,會檢查對該信號的處理機制。如果是SIG_IGN,就忽略該信號;如果是SIG_DFT,則會采用系統默認的處理動作,通常是終止進程或忽略該信號;如果給該信號指定了一個處理函數(捕捉),則會中斷當前進程正在執行的任務,轉而去執行該信號的處理函數,返回后再繼續執行被中斷的任務。

      在有些情況下,我們不希望自己的shell腳本在運行時刻被中斷,比如說我們寫得shell腳本設為某一用戶的默認shell,使這一用戶進入系統后只能作某一項工作,如數據庫備份, 我們可不希望用戶使用 Ctrl+C 等方法進入到shell狀態做我們不希望做的事情。這便用到了信號處理。

      以下是一些你可能會遇到的常見信號:

      信號名稱 信號數 描述
      SIGHUP 1 本信號在用戶終端連接(正常或非正常)結束時發出,通常是在終端的控制進程結束時,通知同一session內的各個作業,這時它們與控制終端不再關聯。登錄Linux時,系統會分配給登錄用戶一個終端(Session)。在這個終端運行的所有程序,包括前臺進程組和后臺進程組,一般都屬于這個Session。當用戶退出Linux登錄時,前臺進程組和后臺有對終端輸出的進程將會收到SIGHUP信號。這個信號的默認操作為終止進程,因此前臺進程組和后臺有終端輸出的進程就會中止。對于與終端脫離關系的守護進程,這個信號用于通知它重新讀取配置文件。
      SIGINT 2 程序終止(interrupt)信號,在用戶鍵入 Ctrl+C 時發出。
      SIGQUIT 3 和SIGINT類似,但由QUIT字符(通常是Ctrl /)來控制。進程在因收到SIGQUIT退出時會產生core文件,在這個意義上類似于一個程序錯誤信號。
      SIGFPE 8 在發生致命的算術運算錯誤時發出。不僅包括浮點運算錯誤,還包括溢出及除數為0等其它所有的算術錯誤。
      SIGKILL 9 用來立即結束程序的運行。本信號不能被阻塞,處理和忽略。
      SIGALRM 14 時鐘定時信號,計算的是實際的時間或時鐘時間。alarm 函數使用該信號。
      SIGTERM 15 程序結束(terminate)信號, 與SIGKILL不同的是該信號可以被阻塞和處理. 通常用來要求程序自己正常退出;kill 命令缺省產生這個信號。

      例子

      當shell收到 HUP INT PIPE QUIT TERM 這幾個命令時,當前執行的程序會執行 exit 1

      [root@pc root]$ trap "exit 1" HUP INT PIPE QUIT TERM
      

      1 清理臨時文件

      下面展示了如果有人試圖從終端中止程序時,如何刪除文件然后退出:

      trap "rm -f $WORKDIR/work1 $WORKDIR/dataout; exit" 2
      

      執行shell程序,如果程序接收信號為2,那么這兩個文件 (work1 和 dataout) 將被自動刪除。

      添加信號1 SIGHUP

      $ trap "rm $WORKDIR/work1 $WORKDIR/dataout; exit" 1 2
      

      2 忽略信號

      如果陷阱列出的命令是空的,指定的信號接收時,將被忽略:

      $ trap '' 2
      

      忽略多個信號:

      $ trap '' 1 2 3 15
      

      3 重置陷阱

      當你改變了收到信號后采取的動作,你可以省略第一個參數來重置到默認行為。

      $ trap 1 2
      

      注意

      1. trap -l 等價于執行 kill -l
      2. 發送信號請查看 kill 命令。
      3. 該命令是bash內建命令,相關的幫助信息請查看 help 命令。
      4. 建議您閱讀以下參考資料來深入了解該命令:
      主站蜘蛛池模板: 久久综合精品国产一区二区三区 | 色综合无码AV网站| 狠狠色丁香婷婷久久综合不卡| 五月丁香六月综合av| 色综合合久久天天给综看| 亚洲综合伊人久久综合| 色之综合天天综合色天天棕色| 色偷偷亚洲第一综合网| 图图资源网亚洲综合网站| 伊人色综合久久天天网| 色综合色狠狠天天综合色| 亚洲伊人成无码综合网| 婷婷综合激情五月中文字幕| 亚洲av一综合av一区| 亚洲综合另类小说色区色噜噜| 久久综合给久久狠狠97色| 伊人久久大香线蕉综合影| 色综合久久久久久久| 在线综合亚洲欧洲综合网站| 国产精品亚洲综合天堂夜夜| 亚洲国产成人久久综合| 91综合久久婷婷久久| 狼狼综合久久久久综合网| 99热婷婷国产精品综合| 国产成人AV综合久久| 色偷偷91久久综合噜噜噜噜| 国产99久久亚洲综合精品| 色综合久久久久久久| 激情综合婷婷丁香五月俺来也| 色噜噜狠狠色综合日日| 制服丝袜人妻综合第一页 | 久久综合久久伊人| 丁香六月婷婷综合激情动漫| 亚洲狠狠色丁香婷婷综合| 色综合久久久无码中文字幕波多| 天天干天天色综合网| 一本久久综合亚洲鲁鲁五月天| 丁香六月纪婷婷激情综合| 久久婷婷香蕉热狠狠综合| 一本一道久久综合久久| 综合久久久久久中文字幕|