哪些键组合与信号相关联

时间:2016-02-19 13:44:17

标签: linux macos perl signals

我正在写一些perl脚本,我想利用信号随时执行某些例程。我看到整个地方都能打印出信号是什么,

perl -e 'foreach (keys %SIG) { print "$_\n" }'

我已经使用“INT”转到使用ctrl + c激活的子程序。

我无法找到任何关键组合与其他信号相关联的地方。某个地方有名单吗?我写的脚本应该适用于mac和linux计算机。

我知道ctrl + c信号在系统之间是类似的,perl中可以使用哪些“信号”以及哪些键激活它们?

1 个答案:

答案 0 :(得分:2)

  

其他什么"信号"可以在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 NUM39 NUM40 NUM41 NUM42 NUM43 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' s $Config{sig_name}获得。

还有两个伪信号,__WARN____DIE__

  

以及哪些键激活它们?

以下信号通常是为响应终端输入而发送的:

  • SIGINT
  • SIGQUIT是一个更严肃的"提供核心转储的SIGINT版本。
  • SIGTSTP将进程发送到后台。
  • SIGSTOP是一个无法捕获的信号,冻结了这个过程。
  • SIGCONT恢复SIGSTOP冻结的进程。

您可以使用以下内容查看这些绑定的键:

$ 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。
  • 当会话终端断开连接时发送SIGHUP。
  • 发送SIGTERM以请求进程退出。
  • SIGKILL无法被抓住。它被强行终止了一个过程。
  • 当孩子退出时发送SIGCHLD。
  • SIGALRM由alarm发送。
  • 写入具有封闭读取端的管道时发送SIGPIPE。