perl中使用signal(信号)实例
Perl通过内置%SIG哈希绑定信号处理函数,能拦截INT、TERM等信号,阻止Ctrl+C关闭程序,支持IGNORE忽略与DEFAULT恢复默认。使用kill命令发送信号,SIGUSR1和SIGUSR2供开发者自定义处理逻辑,实现多进程间通信、优雅重启、资源清理以及日志记录等多种功能。
信号(signal)是个好东西,用好了能让程序功能更上一层楼。在Linux下,想列出所有信号?很简单,敲个 kill -l 就行。下面是我手头这台机器上的输出(后面其实还有到64的,没全列出来):
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 里自己拦截它。
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,专门用来挂接信号处理函数。如果你想彻底忽略某个信号,写成这样:
想恢复默认行为,就是:
说到发送信号,除了物理上按 Ctrl+C,还可以在终端里用 kill 命令模拟:
真正比较实用的是 SIGUSR1 和 SIGUSR2,这两兄弟是留给开发者自定义的。你可以在程序里写任意逻辑来处理这两个信号,比如打开/关闭调试日志、切换工作模式等。需要触发时,在终端里敲:
就能让程序执行对应的处理函数。而且要注意,信号机制是操作系统的底层功能,不限于 Perl——其他语言也能用,只是语法不同。理解了这个思路,写多进程通讯或者优雅重启就顺手多了。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













