With ksh/bash/zsh:
{ (./slowprocess.sh >&3 3>&-; echo "$?") | if read -t 3 status; then echo "Cool it completed with status $status, do stuff..." else echo "It didn't complete, do something else..." fi } 3>&1 We duplicate the original stdout onto fd 3 (3>&1) so we can restore it for slowprocess.sh (>&3), while stdout for the rest of the (...) subshell goes to the pipe to read -t 3.
Alternatively, if you want to use timeout (here assuming GNU timeout):
timeout --foreground 3 sh -c './slowprocess.sh;:'sh;exit' would avoid slowprocess.sh to bebeing killed (the ;:;exit is necessary for sh implementations that optimise by executing the last command in the shell process).