shell訊號捕捉命令 trap

Pyerlife發表於2018-01-12

trap 命令

tarp命令用於在接收到指定訊號後要執行的動作,通常用途是在shell指令碼被中斷時完成清理工作。例如:
指令碼在執行時按下CTRL+c時,將顯示"program exit..."並退出(CTRL+c的訊號是SIGINT)

#!/bin/bash
trap "ehco 'program exit...'; exit 2" SIGINT

....

訊號

常用訊號

訊號名稱 訊號數 描述
SIGINT 2 程式終止(interrupt)訊號, 在使用者鍵入INTR字元(通常是Ctrl+C)時發出。
SIGQUIT 3 和SIGINT類似, 但由QUIT字元(通常是Ctrl /)來控制. 程式在因收到SIGQUIT退出時會產生core檔案, 在這個意義上類似於一個程式錯誤訊號。
SIGFPE 8 在發生致命的算術運算錯誤時發出. 不僅包括浮點運算錯誤, 還包括溢位及除數為0等其它所有的算術的錯誤。
SIGKILL 9 用來立即結束程式的執行. 本訊號不能被阻塞, 處理和忽略。
SIGALRM 14 時鐘定時訊號, 計算的是實際的時間或時鐘時間. alarm函式使用該訊號。 SIGTERM

捕獲訊號

  • trap的命令語法:

    trap command signal

    這裡的command可以是linux命令,或使用者定義的函式。signal訊號名稱訊號數,可以指定多個訊號,以空格相隔。

  • trap在shell常見用途

    • 指令碼退出前執行命令

    指令碼在執行時按下CTRL+c時,將顯示"program exit..."並退出(CTRL+c的訊號是SIGINT)
    shell trap "ehco 'program exit...'; exit 2" SIGINT

    • 忽略訊號

    例:指令碼執行時忽略 SIGINT SIGQUIT SIGFPE等訊號
    shell trap '' 2 3 8

相關文章