reset-elapsed() { (( last_cmd_at = SECONDS )) } ping-timer() { kill -USR1 "$reaper_pid" 2>/dev/null } kill-reaper() { kill -KILL "$reaper_pid" } { trap reset-elapsed USR1 last_cmd_at=0 while sleep 1; do (( elapsed = SECONDS - last_cmd_at )) if (( elapsed > 600 )); then kill -KILL "$$" exit fi done } & reaper_pid=$! prompt_cmds+=(ping-timer) trap kill-reaper EXIT