我正在编写一些 perl 脚本,我想利用信号随时执行某些例程。我到处都能看到打印出信号的能力,
perl -e 'foreach (keys %SIG) { print "$_\n" }'
而且我已经使用“INT”转到一个用 ctrl+c 激活的子程序。
我在任何地方都找不到与其他信号关联的组合键。某处有 list 吗?我正在编写的脚本应该可以在 mac 和 linux 计算机上运行。
我知道 ctrl+c 信号在系统之间是类似的,在 perl 中可以使用哪些其他“信号”以及哪些键可以激活它们?
最佳答案
what other "signals" can be utilized in perl
这些是 Perl 识别的信号名称:
$ perl -V:sig_name
sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM34 NUM44 NUM40 NUM44 NUM45 NUM46 NUM4 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED ';
以上列表也可以从Config.pm的$Config{sig_name}
获取。
还有两个伪信号,__WARN__
和 __DIE__
。
and what keys activate them?
通常发送以下信号以响应终端输入:
- 信号情报
- SIGQUIT 是一个更“严肃”的 SIGINT 版本,它提供核心转储。
- SIGTSTP 向后台发送进程。
- SIGSTOP 是一个无法捕获的信号,它会卡住进程。
- SIGCONT 恢复被 SIGSTOP 卡住的进程。
您可以使用以下命令查看这些绑定(bind)到什么键:
$ stty -a | perl -ne'
$b{$1}=$2 while /\b(intr|quit|susp|stop|start)\s*=\s*([^\s;]+)/g;
END {
print "SIGINT: $b{intr}\n";
print "SIGQUIT: $b{quit}\n";
print "SIGTSTP: $b{susp}\n";
print "SIGSTOP: $b{stop}\n";
print "SIGCONT: $b{start}\n";
}
'
SIGINT: ^C
SIGQUIT: ^\
SIGTSTP: ^Z
SIGSTOP: ^S
SIGCONT: ^Q
大多数信号不是作为终端输入的结果发送的。以下是常用的信号以及通常导致它们发送的原因:
- SIGSEGV 在程序执行非法操作时发送(通常是使用错误指针的结果)。
- 当 session 的终端断开连接时发送 SIGHUP。
- 发送 SIGTERM 以请求进程退出。
- 无法捕获 SIGKILL。它被发送以强制终止进程。
- SIGCHLD 在 child 退出时发送。
- SIGALRM 由
警报
发送。 - SIGPIPE 在写入具有封闭读取端的管道时发送。
关于linux - 哪些组合键与信号相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35506817/