在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ UNIX 信號(hào)和陷阱
UNIX 文件權(quán)限/訪問(wèn)模式
UNIX 系統(tǒng)性能
UNIX 管道和過(guò)濾器
UNIX 進(jìn)程管理
Shell 內(nèi)置數(shù)學(xué)函數(shù)
UNIX 環(huán)境
UNIX 文件管理
Unix
UNIX 網(wǎng)絡(luò)實(shí)用工具
UNIX 系統(tǒng)日志
UNIX 目錄管理
vi編輯器教程
Unix 基本工具(打印,電子郵件)
UNIX 用戶管理
UNIX 信號(hào)和陷阱
Unix 正則表達(dá)式SED
Unix 文件系統(tǒng)基礎(chǔ)
Unix是什么?
Unix 有用命令

UNIX 信號(hào)和陷阱

信號(hào)發(fā)送到一個(gè)程序來(lái)表示,一個(gè)重要的事件已經(jīng)發(fā)生軟件中斷。事件可以從用戶請(qǐng)求訪問(wèn)非法內(nèi)存錯(cuò)誤。一些信號(hào),例如中斷信號(hào),表明用戶提出的程序來(lái)完成的東西,而不是在通常的控制流。

以下是一些你可能會(huì)遇到的,要在程序中使用的更常見(jiàn)的信號(hào):

信號(hào)名稱 信號(hào)數(shù) 描述
SIGHUP 1 Hang up detected on controlling terminal or death of controlling process
SIGINT 2 Issued if the user sends an interrupt signal (Ctrl + C).
SIGQUIT 3 Issued if the user sends a quit signal (Ctrl + D).
SIGFPE 8 Issued if an illegal mathematical operation is attempted
SIGKILL 9 If a process gets this signal it must quit immediately and will not perform any clean-up operations
SIGALRM 14 Alarm Clock signal (used for timers)
SIGTERM 15 Software termination signal (sent by kill by default).

信號(hào)一覽表:

有一個(gè)簡(jiǎn)單的方法,列出了所有你的系統(tǒng)支持的信號(hào)。只要發(fā)出  kill -l  命令,它會(huì)顯示所有支持的信號(hào):

$ kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

實(shí)際的信號(hào)列表之間的Solaris,HP-UX 和 Linux。

默認(rèn)操作:

每個(gè)信號(hào)都有默認(rèn)與它相關(guān)聯(lián)的動(dòng)作。信號(hào)的默認(rèn)操作是,當(dāng)它接收信號(hào)的動(dòng)作腳本或程序執(zhí)行。

有些可能違反的操作是:

  • 終止進(jìn)程。

  • 忽略信號(hào)。

  • 核心轉(zhuǎn)儲(chǔ)。這將創(chuàng)建一個(gè)文件稱為核心記憶形象的過(guò)程,當(dāng)它收到的信號(hào)。

  • 停止進(jìn)程。

  • 繼續(xù)停止的進(jìn)程。

發(fā)送信號(hào):

有幾種方法提供一個(gè)程序或腳本的信號(hào)。其中最常見(jiàn)的是執(zhí)行腳本時(shí)用戶鍵入Control-C或INTERRUPT 鍵。

當(dāng)你按下Ctrl+ C鍵發(fā)送一個(gè)SIGINT的腳本,并按照定義的默認(rèn)動(dòng)作腳本終止。

其他常見(jiàn)的傳送信號(hào)的方法是使用kill命令的語(yǔ)法如下:

$ kill -signal pid

signal 信號(hào)提供的電話號(hào)碼或姓名,pid是信號(hào)要發(fā)送到的進(jìn)程ID。示例:

$ kill -1 1001

HUB或掛起信號(hào)發(fā)送到正在運(yùn)行的程序的進(jìn)程ID 1001。發(fā)送kill信號(hào)相同的過(guò)程使用以下命令:

$ kill -9 1001

這會(huì)殺死正在運(yùn)行的進(jìn)程的進(jìn)程ID 1001。

捕獲信號(hào):

當(dāng)你按下Ctrl + C鍵或Break鍵在終端一個(gè)shell程序的執(zhí)行過(guò)程中,正常程序?qū)⒘⒓唇K止,并返回命令提示符。這可能并不總是可取的。例如,你可能最終留下了一堆臨時(shí)文件,將不會(huì)清理。

捕獲這些信號(hào)是很容易的,trap命令的語(yǔ)法如下:

$ trap commands signals

這里的命令可以是任何有效的Unix命令,或什至一個(gè)用戶定義的函數(shù),信號(hào)可以是任意數(shù)量的信號(hào),你想來(lái)捕獲的列表。

在shell腳本中的陷阱有三種常見(jiàn)的用途:

  1. 清理臨時(shí)文件

  2. 忽略信號(hào)

清理臨時(shí)文件:

trap命令作為一個(gè)例子,下面展示了如何可以刪除一些文件,然后退出,如果有人試圖從終端中止程序:

$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2

執(zhí)行shell程序,這個(gè)陷阱的角度,這兩個(gè)文件work1$$ 和 dataout$$ 將被自動(dòng)刪除,如果程序接收信號(hào)數(shù)為2。 

因此,用戶中斷執(zhí)行,如果執(zhí)行的程序后,這個(gè)陷阱你可以放心,這兩個(gè)文件將被清理。 exit 命令如下 rm 是必要的,因?yàn)闆](méi)有它的執(zhí)行將繼續(xù)在節(jié)目中的一點(diǎn),它離開(kāi)時(shí)收到信號(hào)。

1號(hào)信號(hào)產(chǎn)生掛斷:要么有人故意掛斷線路或線路被意外斷開(kāi)。

您可以修改前面的陷阱也刪除指定的文件,在這種情況下,兩個(gè)信號(hào)信號(hào)1號(hào)添加到列表:

$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2

現(xiàn)在,這些文件將被刪除,如果該行被掛了,或者按Ctrl+ C鍵被按下。

來(lái)捕獲指定的命令必須用引號(hào)括起來(lái),如果它們包含一個(gè)以上的命令。另外請(qǐng)注意,在 shell 命令行掃描 trap 命令得到執(zhí)行,并再次當(dāng)一個(gè)所列出的的信號(hào)被接收的時(shí)間。

WORKDIR 值 $$ 所以在前面的例子中,將被取代 trap 命令執(zhí)行的時(shí)間。如果你想這種替代發(fā)生在收到信號(hào)1或2的時(shí)間你可以把單引號(hào)內(nèi)的命令:

$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2

忽略信號(hào):

如果陷阱列出的命令是空的,指定的信號(hào)接收時(shí),將被忽略。例如,下面的命令:

$ trap '' 2

指定的中斷信號(hào)是被忽略的。你可能要忽略某些信號(hào)時(shí)進(jìn)行一些操作,不希望打斷。可以指定多個(gè)信號(hào)被忽略如下:

$ trap 
            
上一篇:UNIX 目錄管理