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