system()으로 호출 된 반복 작업을 일괄 처리하기 위해 Perl 스크립트를 사용하고 싶습니다. 무언가 잘못되어이 스크립트를 중단하고 싶다면,^C는 쉘에 의해 캡쳐되고, 어떤 작업이든지 중단되며, Perl 스크립트는 다음 스크립트와 함께 즐겁게 진행됩니다.perl이 shell - interrupt를 호출합니다. C가 perl이 아닌 셸을 중지합니다.
인터럽트가 Perl 스크립트를 중지하도록 작업을 호출 할 수있는 방법이 있습니까?
system()으로 호출 된 반복 작업을 일괄 처리하기 위해 Perl 스크립트를 사용하고 싶습니다. 무언가 잘못되어이 스크립트를 중단하고 싶다면,^C는 쉘에 의해 캡쳐되고, 어떤 작업이든지 중단되며, Perl 스크립트는 다음 스크립트와 함께 즐겁게 진행됩니다.perl이 shell - interrupt를 호출합니다. C가 perl이 아닌 셸을 중지합니다.
인터럽트가 Perl 스크립트를 중지하도록 작업을 호출 할 수있는 방법이 있습니까?
system
의 반환 값을 확인하지 않습니다. 부모 프로그램에 추가 : 예상대로
use autodie qw(:all);
과 프로그램이 중단됩니다
"…" died to signal "INT" (2) at … line …
당신은 당신의 자신의 업을 청소하거나 다른 메시지를 사용하기 위해 Try::Tiny이 예외를 잡을 수 있습니다. 당신은 시스템에 의해 실행 된 명령 신호 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 취급 및 system()
전화; $?