提問: 我需要通過使用Perl的自定義信號處理程序來處理一個中斷信號。在一般情況下,我怎麼在Perl程序中捕獲並處理各種信號(如INT,TERM)?
作為POSIX標准的異步通知機制,信號由操作系統發送給進程某個事件來通知它。當產生信號時,操作系統會中斷目標程序的執行,並且該信號被發送到該程序的信號處理函數。可以定義和注冊自己的信號處理程序或使用默認的信號處理程序。
在Perl中,信號可以被捕獲,並由一個全局的%SIG哈希變量指定處理函數。這個%SIG哈希變量的鍵名是信號值,鍵值是對應的信號處理程序的引用。因此,如果你想為特定的信號定義自己的信號處理程序,你可以直接在%SIG中設置信號的哈希值。
下面是一個代碼段來處理使用自定義信號處理程序中斷(INT)和終止(TERM)的信號。
$SIG{INT} = \&signal_handler; $SIG{TERM} = \&signal_handler; sub signal_handler { print "This is a custom signal handler\n"; die "Caught a signal $!"; }
%SIG其他的可用的鍵值有'IGNORE'和'DEFAULT'。當所指定的鍵值是'IGNORE'(例如,$SIG{CHLD}='IGNORE')時,相應的信號將被忽略。指定'DEFAULT'的鍵值(例如,$SIG{HUP}='DEFAULT'),意味著我們將使用一個(系統)默認的信號處理程序。
Linux Socket實現機器間的通信(Perl) http://www.linuxidc.com/Linux/2013-03/81454.htm
Perl 獲取cpu使用率 http://www.linuxidc.com/Linux/2013-06/85950.htm
Perl中pop與push函數 http://www.linuxidc.com/Linux/2013-01/78154.htm
【Perl腳本】找出日志中的錯誤信息並發送郵件 http://www.linuxidc.com/Linux/2012-11/75069.htm
用Perl 從MySQL取出數據做統計分析代碼 http://www.linuxidc.com/Linux/2012-02/53289.htm
Perl語言入門 第六版中文清晰PDF http://www.linuxidc.com/Linux/2014-08/105402.htm
Perl 的詳細介紹:請點這裡
Perl 的下載地址:請點這裡