How do I get rid of Java child processes when my Java app exits/crashes?

Steve McLeod picture Steve McLeod · Nov 4, 2008 · Viewed 9.2k times · Source

I launch a child process in Java as follows:

final String[] cmd = {"<childProcessName>"};
Process process = Runtime.getRuntime().exec(cmd);

It now runs in the background. All good and fine.

If my program now crashes (it is still in dev :-)) the child process still seems to hang around. How can I make it automatically end when the parent Java process dies?

If it helps, I'm using Mac OS X 10.5

Answer

Steve McLeod picture Steve McLeod · Nov 4, 2008

I worked it out myself already. I add a shutdown hook, as follows:

final String[] cmd = {"<childProcessName>"};
final Process process = Runtime.getRuntime().exec(cmd);
Runnable runnable = new Runnable() {
    public void run() {
        process.destroy();
    }
};
Runtime.getRuntime().addShutdownHook(new Thread(runnable));