If a called program stop’s responding it causes the whole shell script to stop and wait for indefinite amount of time for the called program to finish. One way to avoid this is described below where simple timeout is created with help of sleep command and if the command is not able to finish during that time a kill is called to stop the execution of the command.
#/bin/sh
# Author: Jan Melen-jan(at)melen.org
#
TIMEOUT=600
SIGNAL="INT"
<fill your command and params here> &
PID=$!
if [ "${PID}" != "0" ]; then
(sleep "${TIMEOUT}"; kill "${SIGNAL}" "${PID}") &
KILLER=$!
wait "${PID}" 2>/dev/null
R=$?
kill -HUP "${KILLER}" 2>/dev/null
if [ $R -ne 0 ]; then
echo "*** ERROR: Command exited with an error ***"
fi
fi