1.命令簡(jiǎn)介
trap 命令是 Shell 內(nèi)建命令,用于指定在接收到信號(hào)后將要采取的動(dòng)作。常見的用途是在腳本程序被中斷時(shí)完成清理工作。
2.命令格式
trap[-lp][ARG][SIGSPECS]
3.選項(xiàng)說明
-l
列出信號(hào)名稱與對(duì)應(yīng)的數(shù)值
-p
列出信號(hào)與其綁定的命令列表
ARG
與指定信號(hào)綁定的命令。如果 ARG 為空字符串,表示忽略信號(hào);如果 ARG 不指定(缺?。┗?yàn)?,表示執(zhí)行信號(hào)的默認(rèn)動(dòng)作
SIGSPECS
信號(hào)列表,可以是信號(hào)名稱,也可以是信號(hào)對(duì)應(yīng)的數(shù)值。可用信號(hào)可以使用trap-l查看
4.常用示例
(1)忽略 HUP、INT、QUIT、TSTP 信號(hào)。
trap""HUPINTQUITTSTP
(2)捕獲 HUP、INT、QUIT、TSTP 信號(hào),并執(zhí)行默認(rèn)動(dòng)作。
trapHUPINTQUITTSTP
#或
trap-HUPINTQUITTSTP
(3)掛載 Shell 進(jìn)程結(jié)束前需要執(zhí)行的命令。格式為:trap “commands” EXIT。如腳本 exit.sh:
#!/bin/bash
echo"start"
trap"echo'end'"EXIT
echo"beforeexit"
exit0
執(zhí)行 exit.sh 輸出:
start
beforeexit
end
5.信號(hào)簡(jiǎn)介
信號(hào)是一種進(jìn)程間通信機(jī)制,它給應(yīng)用程序提供一種異步的軟件中斷,使應(yīng)用程序有機(jī)會(huì)接受其他程序發(fā)送的命令(即信號(hào))。應(yīng)用程序收到信號(hào)后,有三種處理方式:忽略、默認(rèn)或捕捉。進(jìn)程收到一個(gè)信號(hào)后,會(huì)檢查對(duì)該信號(hào)的處理機(jī)制。如果是 SIG_IGN,就忽略該信號(hào);如果是 SIG_DFT,則會(huì)采用系統(tǒng)默認(rèn)的處理動(dòng)作,通常是終止進(jìn)程或忽略該信號(hào);如果給該信號(hào)指定了一個(gè)處理函數(shù),則會(huì)中斷當(dāng)前進(jìn)程正在執(zhí)行的任務(wù),轉(zhuǎn)而去執(zhí)行該信號(hào)的處理函數(shù),返回后再繼續(xù)執(zhí)行被中斷的任務(wù)。
在有些情況下,我們不希望自己的 Shell 腳本在運(yùn)行時(shí)被中斷,比如說我們寫的 Shell 腳本設(shè)為某一用戶登錄系統(tǒng)后默認(rèn)執(zhí)行的 Shell 腳本,使這一用戶進(jìn)入系統(tǒng)后只能做某一項(xiàng)工作,如數(shù)據(jù)庫備份, 我們不希望用戶使用 Ctrl+C 發(fā)送 SIGINT 信號(hào)來中斷當(dāng)前 Shell 腳本的執(zhí)行,進(jìn)入到 Shell 交互模式,做我們不希望做的事情。這便用到了信號(hào)處理。
以下是一些你可能會(huì)遇到的,要在程序中使用的常見的信號(hào):
(點(diǎn)擊查看大圖)
詳細(xì)的信號(hào)列表,可以使用命令trap -l
或kill -l
查看,也可以查看頭文件trap -l
,查看系統(tǒng)支持的所有信號(hào)如下:
1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP
6)SIGABRT7)SIGBUS8)SIGFPE9)SIGKILL10)SIGUSR1
11)SIGSEGV12)SIGUSR213)SIGPIPE14)SIGALRM15)SIGTERM
16)SIGSTKFLT17)SIGCHLD18)SIGCONT19)SIGSTOP20)SIGTSTP
21)SIGTTIN22)SIGTTOU23)SIGURG24)SIGXCPU25)SIGXFSZ
26)SIGVTALRM27)SIGPROF28)SIGWINCH29)SIGIO30)SIGPWR
31)SIGSYS34)SIGRTMIN35)SIGRTMIN+136)SIGRTMIN+237)SIGRTMIN+3
38)SIGRTMIN+439)SIGRTMIN+540)SIGRTMIN+641)SIGRTMIN+742)SIGRTMIN+8
43)SIGRTMIN+944)SIGRTMIN+1045)SIGRTMIN+1146)SIGRTMIN+1247)SIGRTMIN+13
48)SIGRTMIN+1449)SIGRTMIN+1550)SIGRTMAX-1451)SIGRTMAX-1352)SIGRTMAX-12
53)SIGRTMAX-1154)SIGRTMAX-1055)SIGRTMAX-956)SIGRTMAX-857)SIGRTMAX-7
58)SIGRTMAX-659)SIGRTMAX-560)SIGRTMAX-461)SIGRTMAX-362)SIGRTMAX-2
63)SIGRTMAX-164)SIGRTMAX
參考文獻(xiàn)
[1] trap manual
[2] Linux命令大全.trap命令
[3] linux中的trap命令
責(zé)任編輯:xj
原文標(biāo)題:每天一個(gè) Linux 命令(108):trap 命令
文章出處:【微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
Linux
+關(guān)注
關(guān)注
87文章
11314瀏覽量
209807 -
命令
+關(guān)注
關(guān)注
5文章
687瀏覽量
22053
原文標(biāo)題:每天一個(gè) Linux 命令(108):trap 命令
文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論