これはあなたが説明しているように見えますが、実際には必要なものではないかもしれません. そして、これは一種のハックです....
#!/usr/bin/bash
trap 'exit 0' SIGUSR1 # this is the normal successful exit point
# trigger the trap if ftp in a background process completes before 10 seconds
(ftp -inv $FTPDEST <<-EOF 2>>logfile
user $USER $PASS
put $file
EOF
kill -s SIGUSR1 $PPID ) & # last line here shuts process down. and exits with success
childpid=$! # get the pid of the child running in background
sleep 10 # let it run 10 seconds
kill $childpid # kill off the ftp command, hope we get killed of first
wait
exit 1 # error exit ftp got hung up
親は 10 秒間待機しますが、ftp の子は 10 秒未満で正常に終了します。
成功とは、子が SIGUSR1 シグナルを親に送信し、親がトラップを介して終了することを意味します。
子の処理に時間がかかりすぎる場合、親は遅い ftp の子を強制終了し、エラーで終了します。