import java.util.Map; public class Main { static public void main(String[] args) throws Exception { checkManager(); for (int i = 1; i <= 2; i++) { System.out.println("\nspawning child #" + i); child(); Thread.sleep(2000); checkManager(); } System.out.println("\ndone!"); } static private void child() throws Exception { System.out.println("spawning child"); ProcessBuilder pb = new ProcessBuilder("sleep", "5"); Process proc = pb.start(); Thread.sleep(1000); checkManager(); proc.waitFor(); System.out.println("child died"); } static private void checkManager() { Map<Thread, StackTraceElement[]> traces = Thread.getAllStackTraces(); boolean found = false; for (Map.Entry<Thread, StackTraceElement[]> entry : traces.entrySet()) { Thread t = entry.getKey(); String name = t.getName(); if (name.equals("java.lang.ProcessManager")) { System.out.println("process manager: " + t.getState()); found = true; } } if (! found) { System.out.println("process manager: nonexistent"); } } }