2016-02-19 65 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。