[Perl]$SIG{INT}

Scenarios: 在程序运行过程中,受到外界终端干扰,如Ctrl+C,导致意外中断
Solution: 可通过 $SIG{INT} 接受 SIGINT 并处理中断,如回收临时文件

[root@localhost tmp]# perl /test_sigint.pl
$SIG{'INT'} = 'my_int_handler';
my $temp_directory = "/tmp/myprog.$$"; # create files below here
mkdir $temp_directory, 0700 or die "Cannot create $temp_directory: $!";

# Time passes, the program runs, creates some temporary
# files in the temp directory, maybe somone presses Control-C
sleep;
# Now it's the end of normal execution
&clean_up;

sub my_int_handler {
    &clean_up;
    print "after clean_up\n";
    `ls -l /tmp/myprog.*`;
    die "interrupted, exiting...\n";
}

sub clean_up {
    unlink glob "$temp_directory/*";
    rmdir $temp_directory;
}

通过Ctrl+c 触发SIGINT的结果如下:

interrupted, exiting...

其它SIG
SIGALRM

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章