shell 移除訊號捕獲

2022-02-01 08:02:44 字數 2356 閱讀 9247

本例中用到的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.sh

loop #

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.sh

loop #

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...