8160848: Add diagnostics to java/lang/ProcessBuilder/Zombies

Reviewed-by: martin
This commit is contained in:
Roger Riggs 2016-07-06 10:33:17 -04:00
parent db8e727862
commit 1e4ea02a07

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -42,6 +42,9 @@ public class Zombies {
! new File("/bin/ps").canExecute()) ! new File("/bin/ps").canExecute())
return; return;
System.out.println("Looks like a Unix system."); System.out.println("Looks like a Unix system.");
long mypid = ProcessHandle.current().getPid();
System.out.printf("mypid: %d%n", mypid);
final Runtime rt = Runtime.getRuntime(); final Runtime rt = Runtime.getRuntime();
try { try {
@ -59,7 +62,10 @@ public class Zombies {
throw new Error("expected IOException not thrown"); throw new Error("expected IOException not thrown");
} catch (IOException expected) {/* OK */} } catch (IOException expected) {/* OK */}
rt.exec(TrueCommand).waitFor(); Process p = rt.exec(TrueCommand);
ProcessHandle pp = p.toHandle().parent().orElse(null);
System.out.printf("pid: %d, parent: %s%n", p.getPid(), pp);
p.waitFor();
// Count all the zombies that are children of this Java process // Count all the zombies that are children of this Java process
final String[] zombieCounter = { final String[] zombieCounter = {
@ -68,6 +74,13 @@ public class Zombies {
}; };
int zombies = rt.exec(zombieCounter).waitFor(); int zombies = rt.exec(zombieCounter).waitFor();
if (zombies != 0) throw new Error(zombies + " zombies!"); if (zombies != 0) {
// Log remaining processes
ProcessBuilder pb = new ProcessBuilder("/bin/ps", "-ef");
pb.inheritIO();
Process p2 = pb.start();
p2.waitFor();
throw new Error(zombies + " zombies!");
}
} }
} }