脚本专栏 
首页 > 脚本专栏 > 浏览文章

perl中使用signal(信号)实例

(编辑:jimmy 日期: 2024/11/28 浏览:3 次 )

使用signal,能让你的程序功能更丰富。要在Linux下列出所有的signal, 利用kill -l即可。 下面是我机器上的输出(后面还有到64的没列出来):

复制代码 代码如下:
xuyang@xuyang-desktop:/$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8 ) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS

其中每个signal在这里有介绍.
下面是一个例子,禁止ctrl+c (ctrl+c 会产生一个INT信号给当前程序) 来关闭当前程序

复制代码 代码如下:
sub INT_handler {
print("Don't Interrupt!\n");
}

$SIG{'INT'} = 'INT_handler'; #another way is $SIG{'INT'} = \&INT_handler ;

for ($x = 0; $x < 10; $x++) {
print("$x\n");
sleep 1;
}

其中的%SIG 是perl内置的hash,专门用来处理信号的。如果要ignore某个信号,可以写成
复制代码 代码如下:
$SIG{‘INT'} = ‘IGNORE' ;

要恢复成缺省的情况,利用
复制代码 代码如下:
$SIG{‘INT'} = ‘DEFAULT' ;

要发送一个ctrl+c 给某个程序,除了使用ctrl+c 以外,还可以键入
复制代码 代码如下:
kill -s INT .

比较有实用价值的是SIGUSR1, SIGUSR2, 这两个signal是自定义的。你可以在你的程序用用任意方式来处理这两个信号。而当你想要触发这个信号的时候,只需要在linux下键入
复制代码 代码如下:
kill -s USR1 pid

就可以触发这个信号处理程序,你可以在这个信号处理程序中打开和关闭调试信息,或者切换工作模式等等。当然因为signal是操作系统的功能,所以这里的变成语言不仅仅对perl适用,对其他的语言也适用。只是语法不同而已。

上一篇:Perl中的模式匹配学习笔记
下一篇:Perl中的控制结构学习笔记
一句话新闻
高通与谷歌联手!首款骁龙PC优化Chrome浏览器发布
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 网站地图 SiteMap