2017-09-12 5 views
-1

웹 서버와 통신하는 동안 때로는 오동작을하는 스크립트가 있습니다. 서버가 정지하거나 데이터로 응답하는 속도가 매우 느립니다.Perl alarm() 또는 Time :: Out Without Kernel SIG

현재 스크립트를 종료하기위한 해킹으로 - 시스템을 스레드로 넘치지 않기 위해 해킹으로 사용하고 있습니다.하지만 이것은 cron 오류가 발생합니다. sysadmin은 실제로 200 개의 이메일을 원하지 않습니다. 이것은 시스템이 넘어 졌을 때 생성됩니다.

non-OK 이탈 및 해당 이메일을 발생시키지 않는 스크립트 (또는 필요한 경우 apiQuery)를 종료하는 대체 방법이 있습니까?

+4

코드를 게시 할 수 있습니까? 그러면 우리는 아마도 해결책을 도울 수 있습니다. –

+3

또는 코드가 실제로 큰 경우 [mcve]를 추가하십시오. –

+0

(1) 예. (2) 어느 것을 원합니까? // Seriosuly, 더 자세한 정보로 질문을 완성하십시오. 처음에는 일부 코드가 있습니다. – zdim

답변

-1

신호 처리기에서 예외를 throw하고 다른 곳에서 catch 할 수 있습니다.

my $success = eval { 
    local $SIG{ALRM} = sub { die "Failure" }; 
    alarm 10; 
    do_something_long(); 
    alarm 0; 
    1; 
}; 
if (!$success) { 
    warn "Timeout!\n" if $verbose; 
    exit 0; 
} 
+0

감사 done', 나는 촬영이 줄 것이다 . 그래도 거기에 SIG {ALRM}이 있습니다. 여전히 커널 알람이 발생합니까? 그것이 내가 피하려고하는 것입니다. 멍청한 질문에 사과드립니다. 나는이 perl 스크립트를 상속 받았으며 나는 거의 펄을 안다. –

+0

그것은 신호를 잡아, 그래서 당신의 프로그램은 그것을 죽이지 않는다 –

+0

완벽하게 작동합니다, 감사합니다 :) –