tinali 2019-04-02
使用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' ;
代码如下:
kill -s INT .
代码如下:
kill -s USR1 pid