
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