RFR: 8364361: [process] java.lang.Process should implement Closeable [v24]
Pavel Rappo
prappo at openjdk.org
Thu Oct 30 19:37:38 UTC 2025
On Mon, 27 Oct 2025 18:42:32 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.
>
> Roger Riggs has updated the pull request incrementally with one additional commit since the last revision:
>
> Add \@implNote to recommend overriding close and calling `super.close()`.
Roger, I'm thinking about that example in `close()`. It would be a ready-to-run program, if not for the method name: `example`. Since the text already says that it's an example, we could rename the method to `main` without loss of information.
This way the example could be pasted into a file and run, thanks to JEP 512: Compact Source Files and Instance Main Methods. Note, I used `var` for the reader and writer to get rid of imports from `java.io`, but it's not essential as a decent IDE would insert them on paste.
void main() {
try (Process p = new ProcessBuilder("cat").start();
var writer = p.outputWriter();
var reader = p.inputReader()) {
writer.write(haiku);
writer.close();
// Read all lines and print each
reader.readAllLines()
.forEach(System.out::println);
var status = p.waitFor();
if (status != 0) {
throw new RuntimeException("unexpected process status: " + status);
}
} catch (Exception e) {
System.out.println("Process failed: " + e);
}
}
String haiku = """
Oh, the sunrise glow;
Paddling with the river flow;
Chilling still, go slow.
""";
-------------
PR Comment: https://git.openjdk.org/jdk/pull/26649#issuecomment-3469753255
More information about the core-libs-dev
mailing list