perl中使用signal(訊號)執行個體_perl

來源:互聯網
上載者:User

使用signal,能讓你的程式功能更豐富。要在Linux下列出所有的signal, 利用kill -l即可。 下面是我機器上的輸出(後面還有到64的沒列出來):

複製代碼 代碼如下:

xuyang@xuyang-desktop:/$ kill -l
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

其中每個signal在這裡有介紹.
下面是一個例子,禁止ctrl+c (ctrl+c 會產生一個INT訊號給當前程式) 來關閉當前程式

複製代碼 代碼如下:

sub INT_handler {
print("Don't Interrupt!\n");
}

$SIG{'INT'} = 'INT_handler'; #another way is $SIG{'INT'} = \&INT_handler ;

for ($x = 0; $x < 10; $x++) {
print("$x\n");
sleep 1;
}

其中的%SIG 是perl內建的hash,專門用來處理訊號的。如果要ignore某個訊號,可以寫成

複製代碼 代碼如下:

$SIG{‘INT'} = ‘IGNORE' ;

要恢複成預設的情況,利用
複製代碼 代碼如下:

$SIG{‘INT'} = ‘DEFAULT' ;

要發送一個ctrl+c 給某個程式,除了使用ctrl+c 以外,還可以鍵入
複製代碼 代碼如下:

kill -s INT .

比較有實用價值的是SIGUSR1, SIGUSR2, 這兩個signal是自訂的。你可以在你的程式用用任意方式來處理這兩個訊號。而當你想要觸發這個訊號的時候,只需要在linux下鍵入
複製代碼 代碼如下:

kill -s USR1 pid

就可以觸發這個訊號處理常式,你可以在這個訊號處理常式中開啟和關閉調試資訊,或者切換工作模式等等。當然因為signal是作業系統的功能,所以這裡的變成語言不僅僅對perl適用,對其他的語言也適用。只是文法不同而已。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.