--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/java/lang/Process.java Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,148 @@
+/*
+ * Copyright 1995-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+package java.lang;
+
+import java.io.*;
+
+/**
+ * The {@link ProcessBuilder#start()} and
+ * {@link Runtime#exec(String[],String[],File) Runtime.exec}
+ * methods create a native process and return an instance of a
+ * subclass of {@code Process} that can be used to control the process
+ * and obtain information about it. The class {@code Process}
+ * provides methods for performing input from the process, performing
+ * output to the process, waiting for the process to complete,
+ * checking the exit status of the process, and destroying (killing)
+ * the process.
+ *
+ * <p>The methods that create processes may not work well for special
+ * processes on certain native platforms, such as native windowing
+ * processes, daemon processes, Win16/DOS processes on Microsoft
+ * Windows, or shell scripts. The created subprocess does not have
+ * its own terminal or console. All its standard I/O (i.e. stdin,
+ * stdout, stderr) operations will be redirected to the parent process
+ * through three streams
+ * ({@link #getOutputStream()},
+ * {@link #getInputStream()},
+ * {@link #getErrorStream()}).
+ * The parent process uses these streams to feed input to and get output
+ * from the subprocess. Because some native platforms only provide
+ * limited buffer size for standard input and output streams, failure
+ * to promptly write the input stream or read the output stream of
+ * the subprocess may cause the subprocess to block, and even deadlock.
+ *
+ * <p>The subprocess is not killed when there are no more references to
+ * the {@code Process} object, but rather the subprocess
+ * continues executing asynchronously.
+ *
+ * <p>There is no requirement that a process represented by a {@code
+ * Process} object execute asynchronously or concurrently with respect
+ * to the Java process that owns the {@code Process} object.
+ *
+ * @author unascribed
+ * @see ProcessBuilder
+ * @since JDK1.0
+ */
+public abstract class Process {
+ /**
+ * Returns the output stream connected to the normal input of the
+ * subprocess. Output to the stream is piped into the standard
+ * input stream of the process represented by this {@code Process}
+ * object.
+ *
+ * <p>Implementation note: It is a good idea for the returned
+ * output stream to be buffered.
+ *
+ * @return the output stream connected to the normal input of the
+ * subprocess
+ */
+ abstract public OutputStream getOutputStream();
+
+ /**
+ * Returns the input stream connected to the normal output of the
+ * subprocess. The stream obtains data piped from the standard
+ * output stream of the process represented by this {@code
+ * Process} object.
+ *
+ * <p>Implementation note: It is a good idea for the returned
+ * input stream to be buffered.
+ *
+ * @return the input stream connected to the normal output of the
+ * subprocess
+ * @see ProcessBuilder#redirectErrorStream()
+ */
+ abstract public InputStream getInputStream();
+
+ /**
+ * Returns the input stream connected to the error output stream of
+ * the subprocess. The stream obtains data piped from the error
+ * output stream of the process represented by this {@code Process}
+ * object.
+ *
+ * <p>Implementation note: It is a good idea for the returned
+ * input stream to be buffered.
+ *
+ * @return the input stream connected to the error output stream of
+ * the subprocess
+ * @see ProcessBuilder#redirectErrorStream()
+ */
+ abstract public InputStream getErrorStream();
+
+ /**
+ * Causes the current thread to wait, if necessary, until the
+ * process represented by this {@code Process} object has
+ * terminated. This method returns immediately if the subprocess
+ * has already terminated. If the subprocess has not yet
+ * terminated, the calling thread will be blocked until the
+ * subprocess exits.
+ *
+ * @return the exit value of the subprocess represented by this
+ * {@code Process} object. By convention, the value
+ * {@code 0} indicates normal termination.
+ * @throws InterruptedException if the current thread is
+ * {@linkplain Thread#interrupt() interrupted} by another
+ * thread while it is waiting, then the wait is ended and
+ * an {@link InterruptedException} is thrown.
+ */
+ abstract public int waitFor() throws InterruptedException;
+
+ /**
+ * Returns the exit value for the subprocess.
+ *
+ * @return the exit value of the subprocess represented by this
+ * {@code Process} object. By convention, the value
+ * {@code 0} indicates normal termination.
+ * @throws IllegalThreadStateException if the subprocess represented
+ * by this {@code Process} object has not yet terminated
+ */
+ abstract public int exitValue();
+
+ /**
+ * Kills the subprocess. The subprocess represented by this
+ * {@code Process} object is forcibly terminated.
+ */
+ abstract public void destroy();
+}