商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > perl中使用signal(信号)实例

perl中使用signal(信号)实例

  发布于2026-06-29 阅读(0)

扫一扫,手机访问

信号(signal)是个好东西,用好了能让程序功能更上一层楼。在Linux下,想列出所有信号?很简单,敲个 kill -l 就行。下面是我手头这台机器上的输出(后面其实还有到64的,没全列出来):

perl中使用signal(信号)实例
复制代码 代码如下:
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

每个信号具体干什么,这里就不展开了。直接进入正题:举个例子,如何禁止用户通过 Ctrl+C 关闭程序?——Ctrl+C 产生的是 INT 信号,我们可以在 Perl 里自己拦截它。

复制代码 代码如下:
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("$xn");
sleep 1;
}

这里的 %SIG 是 Perl 内置的 hash,专门用来挂接信号处理函数。如果你想彻底忽略某个信号,写成这样:

复制代码 代码如下:
$SIG{'INT'} = 'IGNORE';

想恢复默认行为,就是:

复制代码 代码如下:
$SIG{'INT'} = 'DEFAULT';

说到发送信号,除了物理上按 Ctrl+C,还可以在终端里用 kill 命令模拟:

复制代码 代码如下:
kill -s INT .

真正比较实用的是 SIGUSR1 和 SIGUSR2,这两兄弟是留给开发者自定义的。你可以在程序里写任意逻辑来处理这两个信号,比如打开/关闭调试日志、切换工作模式等。需要触发时,在终端里敲:

复制代码 代码如下:
kill -s USR1 pid

就能让程序执行对应的处理函数。而且要注意,信号机制是操作系统的底层功能,不限于 Perl——其他语言也能用,只是语法不同。理解了这个思路,写多进程通讯或者优雅重启就顺手多了。

本文转载于:https://www.jb51.net/article/65715.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

产品推荐

热门关注