회귀 테스트를위한 일련의 배치 스크립트를 실행하는 perl 스크립트가 있습니다. 배치 스크립트에 타임 아웃을 구현하고 싶습니다. 현재 다음 코드가 있습니다.서브 프로세스가있는 perl 알람
my $pid = open CMD, "$cmd 2>&1 |";
eval {
# setup the alarm
local $SIG{ALRM} = sub { die "alarm\n" };
# alarm on the timeout
alarm $MAX_TIMEOUT;
log_output("setting alarm to $MAX_TIMEOUT\n");
# run our exe
while(<CMD>) {
$$out_ref .= $_;
}
$timeRemaining = alarm 0;
};
if ([email protected]) {
#catch the alarm, kill the executable
}
문제는 내가 최대 제한 시간을 설정 했더라도 알람이 절대로 작동하지 않는다는 것입니다. Perl :: Unsafe :: Signals를 사용해 보았지만 도움이되지 않았습니다.
출력을 캡처 할 수있게하려면 배치 스크립트를 실행하는 가장 좋은 방법입니까? 알람을 사용할 수있는 동일한 작업을 수행하는 또 다른 방법이 있습니까, 아니면 프로그램을 제한 시간 초과하는 알람 외에 다른 방법이 있습니까?
알람이 내 perl 및 windows 버전에서 작동하는지 확인하기위한 테스트 스크립트를 만들었지 만 이와 같은 명령을 실행하면 작동하지 않습니다.
Windows 7 x64에서 activeperl 5.10.1을 실행 중입니다.