RFR: 8364361: [process] java.lang.Process should implement close and be AutoCloseable

Volkan Yazici vyazici at openjdk.org
Wed Aug 6 08:13:07 UTC 2025


On Tue, 5 Aug 2025 18:21:24 GMT, Roger Riggs <rriggs at openjdk.org> wrote:

> The teardown of a Process launched by `ProcessBuilder` includes the closing of streams and ensuring the termination of the process is the responsibility of the caller. The `Process.close()` method provides a clear and obvious way to ensure all the streams are closed and the process terminated.
> 
> The try-with-resources statement is frequently used to open streams and ensure they are closed on exiting the block. By implementing `AutoClosable.close()` the completeness of closing the streams and process termination can be done by try-with-resources.
> 
> The actions of the `close()` method are to close each stream and destroy the process if it has not terminated.

src/java.base/share/classes/java/lang/Process.java line 645:

> 643:      * The inputReader and inputStream from the process are closed.
> 644:      * The errorReader and errorStream from the process are closed.
> 645:      * The process is destroyed.

Suggestion:

     * The {@code outputWriter} and {@code outputStream} to the process are closed.
     * The {@code inputReader} and {@code inputStream} from the process are closed.
     * The {@code errorReader} and {@code errorStream} from the process are closed.
     * The process is destroyed.
     *

src/java.base/share/classes/java/lang/Process.java line 657:

> 655:         List<IOException> exceptions = closeable.stream()
> 656:                 .map(Process::doClose)
> 657:                 .filter((Objects::nonNull))

Suggestion:

                .filter(Objects::nonNull)

src/java.base/share/classes/java/lang/Process.java line 668:

> 666:         // Wait briefly for process to exit, if not exited immediately, destroy
> 667:         try {
> 668:             boolean alive = waitFor(Duration.ofMillis(2000));

Doesn't this go against the `the process is terminated without waiting` statement in the spec?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2256282397
PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2256290785
PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2256295388


More information about the core-libs-dev mailing list