Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8176272

(process) ProcessHandle::onExit fails to wait for non-child process

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 9
    • 9
    • core-libs
    • b162
    • linux

        I was trying to get an example to work with the new ProcessHandle API. My goal was to wait on another process (Spotify) to terminate before printing something to the console:

        ProcessHandle handle =
               ProcessHandle.allProcesses()
                 .filter(h -> h.info().commandLine().map(cmd -> cmd.contains("Spotify")).orElse(false))
               .findFirst()
               .orElseThrow(() -> new IllegalArgumentException("No matching handle found"));

        System.out.println(handle.info());

        ProcessHandle completed = handle.onExit().get();
        System.out.println(completed.isAlive());

        However this code doesn't wait on `handle` to be terminated, as the JavaDoc of onExit led me to believe: "Calling onExit().get() waits for the process to terminate and returns the ProcessHandle.". What I expected: the get() call blocks until I terminate the Spotify process. Instead, it runs to completion and prints true for the `isAlive` call in the end. Am I missing something?

        Env: Java(TM) SE Runtime Environment (build 9-ea+157-jigsaw-nightly-h6122-20170221) on MacOS.

              rriggs Roger Riggs
              chegar Chris Hegarty
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved: