#!/bin/bash
~/ProgramDir/Program || exec "$0"
This script would run "~/ProgramDir/Program" and wait for its exit status. If the status is 0 (which means "success" in bash), then the script itself terminates. Otherwise, if the program returns a non-0 value or it terminates unnaturally (e.g. it get killed), the script would launch itself again, like a tail recursion in C.
Edit: code updated according to R..'s comment