perl中使用signal(信號(hào))實(shí)例
使用signal,能讓你的程序功能更豐富。要在Linux下列出所有的signal, 利用kill -l即可。 下面是我機(jī)器上的輸出(后面還有到64的沒(méi)列出來(lái)):
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
其中每個(gè)signal在這里有介紹.
下面是一個(gè)例子,禁止ctrl+c (ctrl+c 會(huì)產(chǎn)生一個(gè)INT信號(hào)給當(dāng)前程序) 來(lái)關(guān)閉當(dāng)前程序
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內(nèi)置的hash,專(zhuān)門(mén)用來(lái)處理信號(hào)的。如果要ignore某個(gè)信號(hào),可以寫(xiě)成
$SIG{‘INT'} = ‘IGNORE' ;
要恢復(fù)成缺省的情況,利用
$SIG{‘INT'} = ‘DEFAULT' ;
要發(fā)送一個(gè)ctrl+c 給某個(gè)程序,除了使用ctrl+c 以外,還可以鍵入
kill -s INT .
比較有實(shí)用價(jià)值的是SIGUSR1, SIGUSR2, 這兩個(gè)signal是自定義的。你可以在你的程序用用任意方式來(lái)處理這兩個(gè)信號(hào)。而當(dāng)你想要觸發(fā)這個(gè)信號(hào)的時(shí)候,只需要在linux下鍵入
kill -s USR1 pid
就可以觸發(fā)這個(gè)信號(hào)處理程序,你可以在這個(gè)信號(hào)處理程序中打開(kāi)和關(guān)閉調(diào)試信息,或者切換工作模式等等。當(dāng)然因?yàn)閟ignal是操作系統(tǒng)的功能,所以這里的變成語(yǔ)言不僅僅對(duì)perl適用,對(duì)其他的語(yǔ)言也適用。只是語(yǔ)法不同而已。
相關(guān)文章
perl用grep map求交集、并集、補(bǔ)集的實(shí)例代碼
perl 用grep map求交集、并集、補(bǔ)集的例子,有需要的朋友可以參考下2013-02-02perl對(duì)m x n類(lèi)似表進(jìn)行按列排序的代碼
perl對(duì)m x n類(lèi)似表進(jìn)行按列排序的代碼,有需要的朋友可以參考下2013-02-02