中文字幕亚洲第一精品|精品国产免费一区二区|久久婷婷五月六月综合版|中文字幕熟妇久久久人妻|久久综合精品国产一区无码|国产成人精品永久免费视频|午夜亚洲国产精品理论片a级|久久精品一区二区三区无码护土

 訪問手機(jī)版  

Linux常用命令|Linux培訓(xùn)學(xué)習(xí)|考試認(rèn)證|工資待遇與招聘,認(rèn)準(zhǔn)超級網(wǎng)工!

招聘|合作 登陸|注冊

網(wǎng)絡(luò)工程師培訓(xùn)

當(dāng)前位置:網(wǎng)絡(luò)工程師 > 技術(shù)課程 > linux > 熱點(diǎn)關(guān)注 > linux常用命令

Linux trap 命令用法詳解

時間:2019-10-17

linux命令大全_linux命令大全 root_linux命令大全

指定在接收到信號后將要采取的動作

trap命令 用于指定在接收到信號后將要采取的動作,常見的用途是在腳本程序被中斷時完成清理工作。當(dāng)shell接收到sigspec指定的信號時,arg參數(shù)(命令)將會被讀取,并被執(zhí)行。例如:

trap "exit 1" HUP INT PIPE QUIT TERM

表示當(dāng)shell收到HUP INT PIPE QUIT TERM這幾個命令時,當(dāng)前執(zhí)行的程序會讀取參數(shù)“exit 1”,并將它作為命令執(zhí)行。

trap -[lp] [[arg] sigspec ...]

如果arg參數(shù)缺省或者為“-”,每個接收到的sigspec信號都將會被重置為它們進(jìn)入shell時的值;

如果arg是空字符串每一個由sigspec指定的信號都會被shell和它所調(diào)用的命令忽略;

如果有-p選項而沒有提供arg參數(shù)則會打印所有與sigspec指定信號相關(guān)聯(lián)的的trap命令;

如果沒有提供任何參數(shù)或者僅有-p選項,trap命令將會打印與每一個信號有關(guān)聯(lián)的命令的列表;

-l選項的作用是讓shell打印一個命令名稱和其相對應(yīng)的編號的列表。

每個sigspec信號都是是以名字或者編號的形式定義在signal.h頭文件中,信號的名字是不區(qū)分大小寫的,其前綴SIG是可選的,如果某個信號是 EXIT(0),那么arg指定的命令將會在shell上執(zhí)行退出命令時執(zhí)行(If a sigspec is EXIT (0) the command arg is executed on exit from the shell),如果sigspec是DEBUG,那么arg指定的命令將會在以下每個命令執(zhí)行之前執(zhí)行:

簡單命令,for語句,case語句,select命令,算法命令,在函數(shù)內(nèi)的第一條命令。

linux命令大全_linux命令大全 root_linux命令大全

更多trap debug的使用可以參考extdebug選項說明。

如果sigspec是ERR,arg參數(shù)指定的命令將會在任何簡單命名執(zhí)行完后返回值為非零值時執(zhí)行,但是也有以下例外情況:

如果執(zhí)行失敗的命令是緊跟在while或者until關(guān)鍵字之后的一組命令中的一部分時如果執(zhí)行失敗的命令是if測試語句的一部分時linux命令大全,是 && 和 ||連接的列表中的一部分時如果執(zhí)行失敗的命令的返回值是被取反過的(通過!操作符)

在以上情況中如果sigspec是ERR,arg命令不會執(zhí)行,這些規(guī)則同樣適用于errexit選項。如果sigspec是RETURN,arg指定的命令在每次shell函數(shù)或者腳本用”.”或者內(nèi)置的命令執(zhí)行完成后執(zhí)行,在shell入口處被忽略的命令 是沒法被trap和reset的,被trap的信號,在創(chuàng)建的子進(jìn)程中使用時會在子進(jìn)程被創(chuàng)建時被重置為原始的值。如果trap使用的sigspec信號 是invalid的信號則trap命令返回false(失。駝t返回成功(true)。

不論該進(jìn)程是捕獲了該信號并從其信號處理函數(shù)返回,還是簡單地忽略該信號,寫操作都將返回epipe錯誤。系統(tǒng)在設(shè)計系統(tǒng)調(diào)用時就考慮了中斷處理問題.當(dāng)進(jìn)程運(yùn)行到一個系統(tǒng)調(diào)用時發(fā)生了中斷,則進(jìn)程進(jìn)入該中斷處理,處理完成后,進(jìn)程會跳過該系統(tǒng)調(diào)用而進(jìn)入下一條程序指令. 應(yīng)該注意的是中斷發(fā)生在系統(tǒng)調(diào)用一級而不是子程序或函數(shù)一級.比如一個程序在一個子程序被調(diào)用前設(shè)置了超時中斷,并在子程序中收到超時中斷,系統(tǒng)在處理完超時中斷后接著處理該子程序被中斷的系統(tǒng)調(diào)用之后的指令,而不是從調(diào)用該子程序名指令的后一條指令繼續(xù)處理.。在用戶進(jìn)程需要對某個中斷做自己定義的處理時,可以自己定義中斷處理函數(shù),并設(shè)置中斷處理函數(shù)與該中斷相關(guān)聯(lián).這樣,用戶進(jìn)程在收到該中斷后,即調(diào)用用戶定義的函數(shù),處理完成后用戶進(jìn)程從被中斷處繼續(xù)運(yùn)行(若用戶定義的中斷函數(shù)沒有長跳函數(shù)或退出運(yùn)行等會改變運(yùn)行指令地址的系統(tǒng)調(diào)用).在中斷信號被處理后,該中斷的處理函數(shù)會恢復(fù)成上次缺省處理函數(shù)而不是保持用戶定義函數(shù),故在用戶定義的中斷處理函數(shù)中一般都再定義該中斷和函數(shù)自己的關(guān)聯(lián).。

 上一個教程:Linux常用命令大全記錄