The start()ProcessBuilder method clearly states that it returns a Process whose API is here . This process has methods that can be called on it, including waitFor, which will wake the current thread when the process terminates. All you have to do is start the thread, give it this process and receive a signal when the process ends or after a timeout.