我想使用 Perl 脚本来批处理使用 system() 调用的重复操作。当出现问题并且我想中断这个脚本时,^C 被 shell 捕获,停止任何工作,并且 Perl 脚本愉快地进行下一个。
有没有办法可以调用该作业,以便中断将停止 Perl 脚本?
我想使用 Perl 脚本来批处理使用 system() 调用的重复操作。当出现问题并且我想中断这个脚本时,^C 被 shell 捕获,停止任何工作,并且 Perl 脚本愉快地进行下一个。
有没有办法可以调用该作业,以便中断将停止 Perl 脚本?
您可以检查$?
系统执行的命令是否死于信号 2 ( INT
):
这是解析的完整示例$?
:
my $rc=system("sleep 20");
my $q=$?;
if ($q == -1) {
print "failed to execute: $!\n"
} elsif ($? & 127) {
printf "child died with signal %d, %s coredump\n",
($q & 127), ($q & 128) ? 'with' : 'without';
} else {
printf "child exited with value %d\n", $q >> 8;
}
# Output when Ctrl-C is hit:
# child died with signal 2, without coredump
因此,您想要的确切检查是:
my $rc=system("sleep 20");
my $q=$?;
if ($q != -1 && (($q & 127) == 2) && (!($? & 128))) {
# Drop the "$? & 128" if you want to include failures that generated coredump
print "Child process was interrupted by Ctrl-C\n";
}
参考:perldoc系统的$?
处理和system()
调用;perldoc perlvar有关更多详细信息$?
您没有检查system
. 添加到您的父程序:
use autodie qw(:all);
它程序将按预期中止:
"…" died to signal "INT" (2) at … line …
您可以使用Try::Tiny捕获此异常,以便自行清理或使用不同的消息。