Perl信号处理学习简单小结_perl

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

时间: 2024-09-13 03:15:11

Perl信号处理学习简单小结_perl的相关文章

Perl读写文件简单示例_perl

!/usr/bin/perl -w use strict; #print "please input a string\n"; #my $line = <STDIN>; #print $line; #wirte a file open(FH, ">aa.txt") or die $!; print FH "hello\n";#向文件写入内容 print FH "OK\n"; close(FH); #open

PHP 函数学习简单小结_php技巧

file_exists() 检查文件或目录是否存在 说明 bool file_exists ( string filename ) 如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE. dirname() 函数返回路径中的目录部分. 语法 dirname(path) path 必需.规定要检查的路径. 例子 <?php echo dirname("c:/testweb/home.php"); echo dirname("/testweb

通过perl实现一个简单的NIDS_perl

随着对网络安全需求的深入开发,基于网络的入侵检测技术已经成为一个重要且有意思的研究方向.想学习NIDS技术除了去读一些现成的资料和一些开源系统的源码,最好的办法莫过于自己去写一个NIDS程序,只有那样才能真正体会到一些NIDS的实现需求和设计妙处. 本质上说NIDS只是一种网络流量的分析工具,通过对网络流量的分析识别出一些已知或未知的攻击行为,一个最简单的NIDS完成的主要工作也就是抓包->协议解码->匹配,众所周知PERL是极其强大的脚本语言,尤其是它的字符串处理能力可以方便地实现对于网络流

MySql存储过程学习知识小结_Mysql

什么是存储过程: 存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了. 存储过程的好处: 1.由于数据库执行动作时,是先编译后执行的.然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高. 2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率. 3.通过存储过程能够使没有权限的

About Perl(翻译Perl官网介绍)_perl

强大, 稳定, 成熟, 可移植性 Perl 5 是一门有着26年历史的,功能强大的.性能丰富的编程语言.Perl能在超过100种的平台上运行,从便携式设备到大型主机.同时她也适合原型设计及大范围的开发项目. 如果拿Perl比做开发语言的大家庭,那么Perl 6就是这个大家庭中的一员,但同时Perl 6又是一门有自己独立开发团队的独立的语言.她的存在对Perl 5的持续开发影响不大. 白皮书: 技术展示 可供您任意使用的Perl 5 技术白皮书 Perl database ORM - 让数据库查询

Perl数组排序学习笔记_perl

本文我们学习如何用Perl对字符串或者数字数组进行排序. Perl有个内置函数叫做sort毫无疑问的可以排序一个数组. 其最简单的形式是传递一个数组,它会返回排序后的元素组成的数组.@sorted = sort @original. 基于ASCII码排序 复制代码 代码如下: #!/usr/bin/perl use strict; use warnings; use 5.010;   use Data::Dumper qw(Dumper);   my @words = qw(foo bar zo

Perl 函数集小结_perl

一.进程处理函数 1.进程启动函数 函数名 eval 调用语法 eval(string) 解说 将string看作Perl语句执行.正确执行后,系统变量$@为空串,如果有错误,$@中为错误信息. 例子 $print = "print (\"hello,world\\n\");";eval ($print); 结果输出 hello, world 函数名 system 调用语法 system(list) 解说 list中第一个元素为程序名,其余为参数.system启动一

Perl学习基本备忘录_perl

1.Perl数组(1): 1) 初始化数组 @array = ( "stringA" , "stringB" , "stringC" );2) 使用负索引循环检索 print $array[-1];  #输出索引为(-1 + 3) % 3 = 2 的 stringC3) 动态增长 $array[4] = "stringD"; #虽然$array[3]还没有使用,但在动态赋值$array[4]的使用,已经对$array[3]赋空

perl 调试命令的相关知识小结_perl

缺省的Perl调试器就是perl解释器本身,另外还有图形界面的调试器.由于在开发程序时一般都使用telnet访问服务器,因此本文主要为大家介绍下缺省的命令行调试器的用法. 用-d命令行选项启动Perl解释器,例如:perl-dtest.pl即进入Perl调试器的交互界面. 调试命令列表:(所有命令都在调试提示符下顶格输入,命令大小写有关)h:显示调试器的帮助信息.|h:以分页形式显示调试器的帮助信息.hh:显示一个压缩的帮助信息.h调试命令:显示某个调试命令的帮助. Perl调试器用法中p表达式