2016-02-19 46 views
1

我在写一些Perl脚本,我想利用信号随时执行某些例程。我看到所有的地方打印出来的信号是什么能力,什么组合键与信号相关

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

,并使用“INT”去到与CTRL + C激活子程序我已经。

我无法找到任何地方哪些组合键与其他信号相关联。有没有列表?我正在编写的脚本应该在Mac和Linux计算机上工作。

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

+1

这听起来像一个XY问题。你能更详细地解释你想做什么吗? – ThisSuitIsBlackNot

回答

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的$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发送。
    • SESSUP在会话终端断开连接时发送。
    • 发送SIGTERM来请求进程退出。
    • SIGKILL不能被捕获。它被发送强行终止一个进程。
    • SIGCHLD在孩子退出时发送。
    • SIGALRM由alarm发送。
    • 当写入一个封闭读取结束的管道时发送SIGPIPE。