perl调用shell——中断^C停止shell,而不是perl
我想使用一个Perl脚本来批处理通过system()调用的重复操作。当出现问题时,我想中断这个脚本,shell将捕获^C,停止任何作业,Perl脚本将愉快地转到下一个脚本perl调用shell——中断^C停止shell,而不是perl,perl,shell,interrupt-handling,Perl,Shell,Interrupt Handling,我想使用一个Perl脚本来批处理通过system()调用的重复操作。当出现问题时,我想中断这个脚本,shell将捕获^C,停止任何作业,Perl脚本将愉快地转到下一个脚本 是否有一种方法可以调用作业,以便中断将停止Perl脚本?您没有检查系统的返回值。添加到父程序: use autodie qw(:all); it程序将按预期中止: "…" died to signal "INT" (2) at … line … 您可以捕获此异常,以便自己清理或使用其他消息。您可以检查$?以查看系统执行的命
是否有一种方法可以调用作业,以便中断将停止Perl脚本?您没有检查
系统的返回值。添加到父程序:
use autodie qw(:all);
it程序将按预期中止:
"…" died to signal "INT" (2) at … line …
您可以捕获此异常,以便自己清理或使用其他消息。您可以检查$?
以查看系统执行的命令是否因信号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";
}
参考:用于$?
处理和系统()
调用;有关$?