本例中用到的trap命令會在每次檢測到sigint訊號時顯示一行簡單的文字訊息。捕獲這些訊號會阻止使用者用bash shell組合鍵ctrl+c來停止程式
code
macname@macdemacbook-pro desktop %cat test.sh#!/bin/bash
#trap ""
sigint
echo this
isa test script
count=1
while [ $count -le 10]do
echo
"loop #$count
"sleep
1count=$[ $count + 1
]done
#echo
"this is the end of the test script
"#%macname@macdemacbook-pro desktop %macname@macdemacbook-pro desktop % ./test.sh
this
isa test script
loop #
1loop #
2loop #
3loop #
4loop #
5loop #
6loop #
7loop #
8loop #
9loop #
10this
isthe end of the test script
macname@macdemacbook-pro desktop %
移除訊號捕獲後,指令碼按照預設行為來處理sigint訊號,也就是終止指令碼執行。但如果信 號是在捕獲被移除前接收到的,那麼指令碼會按照原先trap命令中的設定進行處理。
macname@macdemacbook-pro desktop % ./test.shloop #
1loop #
2loop #
3^c sorry... ctrl-c is
loop #
4loop #
5i just removed the trap
second loop #
1second loop #
2second loop #3^c
macname@macdemacbook-pro desktop %cat test.sh
#!/bin/bash
# removing a
settrap
trap ""
sigint
count=1
while [ $count -le 5
] do
echo
"loop #$count
"sleep
1count=$[ $count + 1
]done
## remove the trap
trap --sigint
echo
"i just removed the trap
"count=1
while [ $count -le 5]do
echo
"second loop #$count
"sleep
1count=$[ $count + 1
]done
macname@macdemacbook-pro desktop %
當指令碼執行到正常的退出位置時,捕獲就被觸發了,shell會執行在trap命令列指定的命令。 如果提前退出指令碼,同樣能夠捕獲到exit。
macname@macdemacbook-pro desktop % ./test.shloop #
1loop #
2loop #
3loop #
4loop #
5goodbye...
macname@macdemacbook-pro desktop % ./test.sh
loop #
1loop #
2^cgoodbye...
macname@macdemacbook-pro desktop %cat test.sh
#!/bin/bash
trap
"echo goodbye...
"exit #
count=1
while [ $count -le 5]do
echo
"loop #$count
"sleep
1count=$[ $count + 1
]done%macname@macdemacbook-pro desktop %
linux訊號捕獲相關
linux中一共有32種訊號,在 usr include bits signum.h 標頭檔案中可以看到 define sighup 1 define sigint 2 define sigquit 3 define sigill 4 define sigtrap 5 define sigabrt ...
Linux訊號的捕獲
typedef void sighandler t int 功能 自定義的函式,以函式指標的方式用於下面的signal訊號註冊函式中的handler函式 sighandler t signal int signum,sighandler t handler 功能 訊號處理註冊函式 signum 訊號...
訊號的捕獲和處理
訊號 signal 是在特定事件發生時由作業系統向程序傳送的訊息。它一種軟體中斷,是程序間唯一的非同步通訊方式。訊號有很多,常見的有 訊號的捕捉和處理 訊號的捕捉和處理由以下2個函式來完成,其中第乙個函式也是由第二個函式實現的 include sighandler t signal int sign...