시간 초과 함수 반환 값

시간 초과 함수 반환 값

나는 데비안에서 타임아웃 기능을 사용하여 스크립트를 5초 동안 기다립니다. 이것은 훌륭하게 작동하지만 내가 겪고 있는 문제는 반환 값이 필요하다는 것입니다. 예를 들어, 1은 시간 초과를 의미하고 0은 시간 초과 없음을 의미합니다. 어떻게 해야 합니까?

내 코드를 살펴보십시오.

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
# here i need the return of timeout

보시다시피 내 connect_script -x 'status' 는 상태를 문자열로 반환하고 이를 화면에 인쇄합니다(아마도 이것을 볼 수는 없습니다). 이 질문의 맥락은 서버(connect_script의 경우)가 정지하는 경우, 스크립트는 아무것도 하지 않습니다. 그렇기 때문에 타임아웃이 필요합니다. 시간이 초과되면 서버를 다시 시작하고 싶습니다. 할 수는 있지만 시간이 초과되는지 확인하는 방법을 모르겠습니다...

답변1

타임아웃이 발생 하면 timeout종료상태 124;이를 확인하여 스크립트가 시간 초과되었는지 확인할 수 있습니다.

답변2

~에 따르면수동( man timeout):

요약 시간 초과 [옵션] 번호 [접미사] 명령 [ARG]...

[...] 명령 시간이 초과되면 상태 124로 종료됩니다. 그렇지 않으면 COMMAND 상태로 종료합니다.

이것을 종료 상태 또는 반환 값이 변수에 저장된다는 지식과 결합하면 다음과 같은 이점을 $?얻을 수 있습니다.

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
RETVAL=$?

그러면 값 $RETVAL(시간 초과 시 124가 됨)을 기준으로 더 많은 처리를 수행하거나 종료 상태에 따라 다른 값을 수행 할 수 있습니다 connect_script.

답변3

반환 값은 timeout하위 프로세스를 종료하는 데 사용한 신호에 따라 다릅니다.

SIGTERM124를 반환합니다.

timeout -s SIGTERM 1 sleep 2; echo $?

하지만 SIGKILL137을 반환합니다.

timeout -s SIGKILL 1 sleep 2; echo $?

매뉴얼 페이지를 참조하십시오:

명령 시간이 초과되고 --preserve-status가 설정되지 않은 경우 상태 124로 종료됩니다. 그렇지 않으면 COMMAND 상태로 종료합니다. 신호가 지정되지 않으면 시간 초과 시 TERM 신호가 전송됩니다. TERM 신호는 신호를 차단하거나 포착하지 않는 모든 프로세스를 종료합니다. 잡을 수 없기 때문에 KILL(9) 신호를 사용해야 할 수도 있습니다. 이 경우 종료 상태는 124 대신 128+9입니다.

관련 정보