1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Map;
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Main {
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static public void main(String[] args) throws Exception {
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        checkManager();
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 1; i <= 2; i++) {
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.println("\nspawning child #" + i);
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            child();
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Thread.sleep(2000);
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            checkManager();
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("\ndone!");
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static private void child() throws Exception {
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("spawning child");
170c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen        ProcessBuilder pb = new ProcessBuilder("sleep", "5");
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Process proc = pb.start();
192ca00c90f8014e9c89ba20a24d90dd5a24452e08Elliott Hughes        Thread.sleep(1000);
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        checkManager();
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        proc.waitFor();
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.out.println("child died");
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static private void checkManager() {
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Map<Thread, StackTraceElement[]> traces = Thread.getAllStackTraces();
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean found = false;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (Map.Entry<Thread, StackTraceElement[]> entry :
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                 traces.entrySet()) {
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Thread t = entry.getKey();
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String name = t.getName();
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (name.equals("java.lang.ProcessManager")) {
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                System.out.println("process manager: " + t.getState());
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                found = true;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (! found) {
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.out.println("process manager: nonexistent");
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
44