I have a java app that uses ProcessBuilder to prepare an operating system command and gives me a Process object. (The actual os command is rsync ov
I'm not sure what Process.destroy() does under the covers (sends a signal or similar?).
What you may find works better is to invoke your ssh/rsync within a shell script, and have that return a process id on stdout, and then when you want to kill the process, perform a /bin/kill with that process id. A little messy, but perhaps more reliable.
Note you can /bin/kill with SIGTERM, and SIGKILL if it's particularly stubborn.