Bash 시간 초과에 대한 특수 작업 수행

Bash 시간 초과에 대한 특수 작업 수행

bash이 질문은 ssh, no 또는 기타 도구에만 관련되어 있습니다.

시간 초과만 감지하고 싶습니다 bash. 시간 초과만 감지하고 싶습니다.아니요다른 종료 조건( exit, EOF또는 ^D신호에 의해 종료됨) 에 관심이 있습니다.

시간 초과 변수를 설정하는 경우:

$ TMOUT=10

시간 초과가 발생하면 다음이 표시됩니다.

$ timed out waiting for input: auto-logout

이는 bash구현에 표시된 대로 별도로 배치 됩니다.여기

하지만 해당 콘솔 메시지 외에는 시간 초과가 발생했는지 감지할 수 있는 방법을 찾지 못했습니다. 다음 코드를 시도했습니다.

export TMOUT=10

function handle-termination {
    local retvalue=$1
    echo "retvalue=$retvalue"
    env > /tmp/env
    if [ "$retvalue" = "$(kill -l ALRM)" ] ; then
        echo "Timeout"
    else
        echo "Exit"
    fi
}

trap 'handle-termination $?' EXIT

$?시간 초과에 대한 반환 코드가 표시를 제공하기를 바라지 0만 시간 초과이든 EXIT신호를 트리거하는 수동 종료이든 항상 그렇습니다.

bash세션 시간 초과를 안정적으로 감지할 수 있는 방법이 있습니까 ?

답변1

함수에 "시간 초과 카운터"를 작성할 수 있으며, 이것이 먼저 완료되면 스크립트가 종료되고, 그렇지 않으면 함수 자체가 종료됩니다.

run_tout_counter() {
    sleep 10 & wait
    echo timeout
    rm /tmp/toutPID
    kill -s SIGINT $processPID
}
export processPID=$$
run_tout_counter &  echo $! > /tmp/toutPID

read -p "type input:" A &&  ps $(cat /tmp/toutPID)  >/dev/null

excode=$?
if [[ $excode == 0 ]] ; then kill -s SIGINT $(cat /tmp/toutPID)  ; fi && rm /tmp/toutPID

관련 정보