On Tue, 5 Aug 2025 18:21:24 GMT, Roger Riggs <rri...@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/snippet-files/ProcessExamples.java line 38: > 36: Paddling with the river flow; > 37: Chilling still, go slow. > 38: """; Nit: I'm not against Haiku, though `writer.write("Hello, world!");` can be enough to get the message across and save the reader (and the maintainer) 6 LoC. src/java.base/share/classes/java/lang/snippet-files/ProcessExamples.java line 48: > 46: // Read all lines and print each > 47: List<String> lines = reader.readAllLines(); > 48: lines.forEach(System.err::println); Simplification suggestion: Suggestion: reader.readAllLines().forEach(System.err::println); Note that this will render the `j.u.List` import at the top redundant too. src/java.base/share/classes/java/lang/snippet-files/ProcessExamples.java line 51: > 49: var status = p.waitFor(); > 50: if (status != 0) > 51: throw new RuntimeException("process status: " + status); Suggestion: throw new RuntimeException("unexpected process status: " + status); src/java.base/share/classes/java/lang/snippet-files/ProcessExamples.java line 53: > 51: throw new RuntimeException("process status: " + status); > 52: } catch (Throwable t) { > 53: System.out.println("Process failed: " + t); Shall we instead catch `Exception` here? Quoting from Effective Java: > Do not catch `Throwable`. It is wrong to catch `Throwable`: it includes > errors (such as `OutOfMemoryError`, `StackOverflowError`, etc.) that are not > meant to be caught by applications. Suggestion: } catch (Exception e) { System.out.println("Process failed: " + e); test/jdk/java/lang/Process/ProcessCloseTest.java line 47: > 45: * @bug 8336479 > 46: * @summary Tests for Process.close > 47: * @library /test/lib Unless I'm mistaken, there are no `/test/lib` dependencies: Suggestion: ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2256334744 PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2256356929 PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2256342566 PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2256350644 PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2256365508