New methods in jdk7 (original) (raw)

Paulo Levi i30817 at gmail.com
Tue Oct 6 16:40:14 UTC 2009


I thought there was the danger of deadlocks if the std.out and std.err wasn't drained? In fact my implementation of "fork" is like this, mostly because i read that otherwise deadlocks happened.:

/**
 * This method creates a new process that will run a new jvm
 * on the main of the given class, with the selected arguments.
 * It already flushes the output and inputstream of the forked jvm
 * into the current jvm.
 * The forked jvm uses the same java.exe and classpath as the current
 * one.
 * @param javaClass class with main method
 * @param args jvm properties.
 * @return Process, the jvm process, already started
 */
public static Process forkJava(Class klass, String... args) throws

IOException, InterruptedException { String javaExe = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java"; String classpath = System.getProperty("java.class.path"); List l = new ArrayList(4 + args.length); l.add(javaExe); l.add("-cp"); l.add(classpath); l.addAll(Arrays.asList(args)); l.add(klass.getCanonicalName()); ProcessBuilder pb = new ProcessBuilder(l); pb.redirectErrorStream(true); final Process p = pb.start(); new Thread(new ProcessStreamConsumer(p), "ProcessBuilderInputStreamConsumer").start(); return p; }

To be clear, you're saying that if i call this, and allow the parent to be killed (by throwing a Error for instance), the child process lives still? (I believe i can't call System.exit(1) without all jvm dying right?)



More information about the core-libs-dev mailing list