我的任务是编写一个Perl脚本(perl v 5.8 - 是我公司使用的),它将文件从文件系统移动到另一个脚本,它会更新Oracle DB 11R2版本中每个文件的位置。
我可以移动文件Ok。我更新数据库确定。 当收到 Ctrl + C 信号时,我无法正常结束脚本。 原因是当脚本连接到数据库时按下 Ctrl + C 。它会立即终止连接,并在执行查询之前返回错误代码。
我曾尝试按照几本书和在线出版物的建议来处理这些信号,但似乎并没有解决这个问题。通常需要几次尝试才能重现它,但最终我设法得到错误条件。
我在下面提供了一些代码快照。
#!/usr/local/PERL/bin/perl -w
my $STOP_SIGNAL = 0;
$SIG{INT} = \&Shutdown_Handler;
$SIG{KILL} = \&Shutdown_Handler;
# I handle other signals too. No child processes on this script.
while ( $STOP_SIGNAL == 0 ) {
# Find some files
# Move some files
# Update DB with file new location and close db connection
# Establish a separate DB connecion to double check the transaction.
}
if ($STOP_SIGNAL) {
print "EXIT DUE TO Ctrl-C SIGNAL\n";
} else {
print "NORMAL EXIT\n";
}
sub Shutdown_Handler() {
$STOP_SIGNAL ++;
return;
}
有没有人碰到过这个?你是怎么解决的? 谢谢Dan。
环境:
PERL:
perl -version
This is perl, v5.8.1 built for i686-linux
DATABASE:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
答案 0 :(得分:0)
my $stop = 0;
$SIG{INT} = sub { ++$stop; };
while (!$stop) {
print "live\n";
sleep 1;
}
print "exit by signal" if ($stop);