內容

名稱

sigtrap - Perl pragma 以啟用簡單訊號處理

語法

    use sigtrap;
    use sigtrap qw(stack-trace old-interface-signals);	# equivalent
    use sigtrap qw(BUS SEGV PIPE ABRT);
    use sigtrap qw(die INT QUIT);
    use sigtrap qw(die normal-signals);
    use sigtrap qw(die untrapped normal-signals);
    use sigtrap qw(die untrapped normal-signals
		    stack-trace any error-signals);
    use sigtrap 'handler' => \&my_handler, 'normal-signals';
    use sigtrap qw(handler my_handler normal-signals
    	    	    stack-trace error-signals);

說明

sigtrap pragma 是安裝訊號處理常式的簡單介面。您可以讓它安裝 sigtrap 本身提供的兩個處理常式之一(一個提供 Perl 堆疊追蹤,另一個僅 die()),或者您也可以提供自己的處理常式讓它安裝。它可以被告知僅安裝處理常式,以處理未捕捉或忽略的訊號。它有三個訊號清單要捕捉,此外您還可以提供自己的訊號清單。

傳遞給呼叫 sigtrapuse 陳述式的引數會依序處理。當遇到訊號名稱或 sigtrap 訊號清單的名稱時,會立即安裝處理常式;當遇到選項時,會影響隨後安裝的處理常式。

選項

訊號處理常式

這些選項會影響隨後安裝訊號所使用的處理常式。

stack-trace

隨後安裝訊號所使用的處理常式會將 Perl 堆疊追蹤輸出至 STDERR,然後嘗試傾印核心。這是預設的訊號處理常式。

die

用於後續安裝的訊號處理程式呼叫 die(實際上是 croak),並附帶訊息指出已捕獲哪個訊號。

handler your-handler

your-handler 將用作後續安裝的訊號處理程式。your-handler 可以是任何值,只要有效指定給 %SIG 的元素即可。請參閱 perlvar 以取得處理函式的範例。

訊號清單

sigtrap 內建幾個要捕捉的訊號清單。它們是

normal-signals

這些是程式通常預期會遇到的訊號,而且預設會導致程式終止。它們是 HUP、INT、PIPE 和 TERM。

error-signals

這些訊號通常表示 Perl 詮釋器或您的腳本有嚴重問題。它們是 ABRT、BUS、EMT、FPE、ILL、QUIT、SEGV、SYS 和 TRAP。

old-interface-signals

這些是舊版 sigtrap 介面預設會捕捉的訊號,它們是 ABRT、BUS、EMT、FPE、ILL、PIPE、QUIT、SEGV、SYS、TERM 和 TRAP。如果沒有將任何訊號或訊號清單傳遞給 sigtrap,就會使用這個清單。

對於這三個清單中的每一個,都會在捕捉之前檢查設定為要捕捉的訊號集合;如果您的架構未實作特定訊號,它將不會被捕捉,而是會被靜默忽略。

其他

untrapped

此權杖告訴 sigtrap 僅為尚未捕捉或忽略的後續列出訊號安裝處理程式。

any

此權杖告訴 sigtrap 為所有後續列出的訊號安裝處理程式。這是預設行為。

signal

任何看起來像訊號名稱的引數(即 /^[A-Z][A-Z0-9]*$/)表示 sigtrap 應該為該名稱安裝處理程式。

number

要求至少使用 sigtrap 版本 number

範例

提供舊版介面訊號的堆疊追蹤

use sigtrap;

同理

use sigtrap qw(stack-trace old-interface-signals);

僅提供 4 個列出的訊號的堆疊追蹤

use sigtrap qw(BUS SEGV PIPE ABRT);

在 INT 或 QUIT 時結束

use sigtrap qw(die INT QUIT);

在 HUP、INT、PIPE 或 TERM 時結束

use sigtrap qw(die normal-signals);

在 HUP、INT、PIPE 或 TERM 時結束,但不要變更已攔截或忽略訊號的行為

use sigtrap qw(die untrapped normal-signals);

在收到目前未攔截的任何正常訊號時結束,在收到任何錯誤訊號時提供堆疊追蹤

    use sigtrap qw(die untrapped normal-signals
		    stack-trace any error-signals);

將 my_handler() 安裝為正常訊號的處理常式

use sigtrap 'handler', \&my_handler, 'normal-signals';

將 my_handler() 安裝為正常訊號的處理常式,在收到錯誤訊號之一時提供 Perl 堆疊追蹤

use sigtrap qw(handler my_handler normal-signals
	    	    stack-trace error-signals);