blob: e8718967d7831be1e45812e4676ffc117f959e76 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/*
25 * @test
26 * @bug 6474073
27 * @summary Make sure zombies don't get created on Unix
28 * @author Martin Buchholz
29 */
30
31import java.io.*;
32
33public class Zombies {
34 public static void main(String[] args) throws Throwable {
35 if (! new File("/usr/bin/perl").canExecute() ||
36 ! new File("/bin/ps").canExecute())
37 return;
38 System.out.println("Looks like a Unix system.");
39 final Runtime rt = Runtime.getRuntime();
40
41 try {
42 rt.exec("no-such-file");
43 throw new Error("expected IOException not thrown");
44 } catch (IOException _) {/* OK */}
45
46 try {
47 rt.exec(".");
48 throw new Error("expected IOException not thrown");
49 } catch (IOException _) {/* OK */}
50
51 try {
52 rt.exec("/bin/true", null, new File("no-such-dir"));
53 throw new Error("expected IOException not thrown");
54 } catch (IOException _) {/* OK */}
55
56 rt.exec("/bin/true").waitFor();
57
58 // Count all the zombies that are children of this Java process
59 final String[] zombieCounter = {
60 "/usr/bin/perl", "-e",
61 "exit @{[`/bin/ps -eo ppid,s` =~ /^ *@{[getppid]} +Z$/mog]}"
62 };
63
64 int zombies = rt.exec(zombieCounter).waitFor();
65 if (zombies != 0) throw new Error(zombies + " zombies!");
66 }
67}