diff --git a/android/tool/src/processing/app/tools/android/ProcessRegistry.java b/android/tool/src/processing/app/tools/android/ProcessRegistry.java new file mode 100644 index 000000000..f0a6ccc92 --- /dev/null +++ b/android/tool/src/processing/app/tools/android/ProcessRegistry.java @@ -0,0 +1,40 @@ +package processing.app.tools.android; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +public class ProcessRegistry { + private static final Set REGISTRY = Collections + .synchronizedSet(new HashSet()); + + static { + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + synchronized (REGISTRY) { + for (final Process p : REGISTRY) { + try { + System.err.println("Cleaning up rogue process " + p); + p.destroy(); + } catch (final Exception drop) { + } + } + } + } + }); + } + + /** + * When starting up a process + * @param p + */ + public static void watch(final Process p) { + REGISTRY.add(p); + } + + public static void unwatch(final Process p) { + REGISTRY.remove(p); + } + +}