Perl訊號處理學習簡單小結_perl

來源:互聯網
上載者:User

Unix 下常見的處理訊號

複製代碼 代碼如下:

No    Name         Default Action       Description
 1     SIGHUP       terminate process    terminal line hangup
 2     SIGINT       terminate process    interrupt program
 3     SIGQUIT      create core image    quit program
 4     SIGILL       create core image    illegal instruction
 5     SIGTRAP      create core image    trace trap
 6     SIGABRT      create core image    abort program (formerly SIGIOT)
 7     SIGEMT       create core image    emulate instruction executed
 8     SIGFPE       create core image    floating-point exception
 9     SIGKILL      terminate process    kill program
 10    SIGBUS       create core image    bus error
 11    SIGSEGV      create core image    segmentation violation
 12    SIGSYS       create core image    non-existent system call invoked
 13    SIGPIPE      terminate process    write on a pipe with no reader
 14    SIGALRM      terminate process    real-time timer expired
 15    SIGTERM      terminate process    software termination signal
 16    SIGURG       discard signal       urgent condition present on socket
 17    SIGSTOP      stop process         stop (cannot be caught or ignored)
 18    SIGTSTP      stop process         stop signal generated from keyboard
 19    SIGCONT      discard signal       continue after stop
 20    SIGCHLD      discard signal       child status has changed
 21    SIGTTIN      stop process         background read attempted from control terminal
 22    SIGTTOU      stop process         background write attempted to control terminal
 23    SIGIO        discard signal       I/O is possible on a descriptor (see fcntl(2))
 24    SIGXCPU      terminate process    cpu time limit exceeded (see setrlimit(2))
 25    SIGXFSZ      terminate process    file size limit exceeded (see setrlimit(2))
 26    SIGVTALRM    terminate process    virtual time alarm (see setitimer(2))
 27    SIGPROF      terminate process    profiling timer alarm (see setitimer(2))
 28    SIGWINCH     discard signal       Window size change
 29    SIGINFO      discard signal       status request from keyboard
 30    SIGUSR1      terminate process    User defined signal 1
 31    SIGUSR2      terminate process    User defined signal 2

perl的訊號處理原理

Perl 提供了%SIG 這個特殊的預設HASH.調用需要使用到系統保留全域HASH數組%SIG,即使 用'$SIG{訊號名}'截取訊號,相當於,在perl程式中出現這個訊號時,執行我們自己定義某段代碼(子函數)的地址值(定義訊號響應函數),這代碼就是截取這個資訊後要執行的結果了.

舉個SIGALRM例子,也就是逾時處理:

複製代碼 代碼如下:

my $timeout = 10 ;
    eval {
        local $SIG{ALRM} = sub { die "alarm\n" }; # \n required
        alarm $timeout; #如果到了$timeout時間就會去執行上面的sub
        sleep 15;
        print " if timeout ,this will not print";
        alarm 0; #恢複到預設的狀態
    };
    if ($@) {
        die  unless $@ eq "alarm\n";   #可能捕獲的不是逾時,是其他錯誤,就die吧
        print "timeout \n" ;
    }
    else {
        print "not timeout";
    }

這裡要說一下perl的錯誤捕獲機制

複製代碼 代碼如下:

eval {
open(FH,”domains.txt”) or die “Can't open files,$!”;
};

捕獲異常
複製代碼 代碼如下:

if($@){#出現異常}
else{#無異常,列印檔案內容
while(){

}
close FH;
}

如果eval塊中的程式有語法錯誤、執行階段錯誤或者遇到die語句,eval將返回undef。錯誤碼被儲存在$@中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.