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

(0)

相关推荐

  • 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 progra

  • 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

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

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

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

  • Android Toast使用的简单小结(推荐)

    老规矩,先上效果图吧 主要实现了几种常用的方式: 1.最基本的Toast 系统自带Toast采用的是队列的方式, 等当前Toast消失后, 下一个Toast才能显示出来:原因是Toast的管理是在队列中,点击一次,就会产生一个新的Toast,要等这个队列中的Toast处理完,这个显示Toast的任务才算结束.so~ 我们可以把Toast改成单例模式,没有Toast再新建它,这样也就解决了连续点击Toast,一直在显示的问题. 2.自定义位置的Toast 3.自定义布局(带图片)的Toast 4.

  • 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

  • JSP学习经验小结分享

    对简单应用,可采用JSP+BAEN,对复杂的应用系统,应采用JSP+EJB,SERVLET变的无足轻重.用JSP完全可替代它. 一.JSP工作原理 在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet.而这个引擎本身也是一个servlet,在JSWDK或WEBLOGIC中,它就是JspServlet. JSP引擎先把该JSP文件转换成一个Java源文件,在转换时如果发现jsp文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息:如果转换成功, JSP引

  • 关于python中密码加盐的学习体会小结

    给密码加密是什么:用户注册的密码一般网站管理人员会利用md5方法加密,这种加密方法的好处是它是单向加密的,也就是说,你只有在提前知道某一串密码对应的md5加密码,才能反推出密码是多少,虽然有极小的几率可能造成两个密码加密之后的值相等(这种现象称为碰撞),不过基本上不用担心,因为概率是极低的.在常用的hashlib模块里还有sha1()等方法,它的本质和md5是一致的,只是产生的结果是160 bit字节,通常用一个40位的16进制字符串表示.而md5是最常见的加密算法,生成速度很快,生成结果是固定

  • 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

  • BASH 学习笔记小结

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束.我们真诚地建议您

随机推荐