Perl信号处理学习简单小结

所属分类: 脚本专栏 / perl 阅读数: 1974
收藏 0 赞 0 分享

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。错误码被保存在$@中。

更多精彩内容其他人还在看

Perl中的符号 ->;、=>; 和 :: 分别表示什么意思?

这篇文章主要介绍了Perl中的符号 ->;、=>; 和 :: 分别表示什么意思,需要的朋友可以参考下
收藏 0 赞 0 分享

perl uc,lc,ucfirst,lcfirst大小写转换函数

这篇文章主要介绍了perl 大小写字母转换函数,需要的朋友可以参考下
收藏 0 赞 0 分享

强大的Perl正则表达式实例详解

正则表达式是Perl语言的特色,基本的语法不是很难,但是编写一个符合需求、高效的正则表达式,还是有一些挑战的。下面这篇文章主要给大家介绍了关于强大的Perl正则表达式的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

Perl5和Perl6对比使用Sigils的差别

今天小编就为大家分享一篇关于Perl5和Perl6对比使用Sigils的差别,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Perl6中的垃圾收集

今天小编就为大家分享一篇关于perl6垃圾收集的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

将Perl5代码迁移到Perl6上的解决方案

今天小编就为大家分享一篇关于将Perl5代码迁移到Perl6上的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

一篇文章搞懂:词法作用域、动态作用域、回调函数及闭包

这篇文章主要给大家介绍了如何通过一篇文章搞懂:词法作用域、动态作用域、回调函数及闭包的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
收藏 0 赞 0 分享

使用脚本实现自动清除指定文件夹下丢失链接文件的符号链接

这篇文章主要介绍了使用脚本实现自动清除指定文件夹下丢失链接文件的符号链接,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

perl命令行参数内建数组@ARGV浅析

这篇文章主要介绍了perl命令行参数内建数组@ARGV浅析,本文重点在于讲解@ARGV的用法,并通过实例来说明,需要的朋友可以参考下
收藏 0 赞 0 分享

Perl使用Tesseract-OCR实现验证码识别教程

这篇文章主要介绍了Perl使用Tesseract-OCR实现验证码识别教程,Tesseract-OCR是一个开源图形识别引擎,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多