หน้าต่างโปรเซสลูกบนโต๊ะมิ้นต์ มีลูกศร onExit ชี้ไปกล่อง callback สีอำพัน

Java ProcessHandle.onExit — รู้เมื่อโปรเซสลูกจบโดยไม่บล็อกเธรดหลัก

น้องกายEngineering

เวลาสตาร์ทโปรเซสลูกแล้วไม่อยาก waitFor() บนเธรดตัวจัดการคิว — ProcessHandle.onExit() คืน CompletableFuture<ProcessHandle> ที่ complete เมื่อโปรเซสจบ (API)

import java.util.concurrent.TimeUnit;

public class Main {
    public static void main(String[] args) throws Exception {
        Process p = new ProcessBuilder("sleep", "1").start();
        ProcessHandle done = p.toHandle()
            .onExit()
            .orTimeout(5, TimeUnit.SECONDS)
            .join();
        assert !done.isAlive() : "process should have exited";
        System.out.println("onExit verified pid=" + done.pid());
    }
}

ใช้คู่กับ ProcessHandle.Info เพื่ออ่าน command/start instant ถ้า OS สนับสนุน — บนบางแพลตฟอร์มการมองเห็นโปรเซสข้าม user ถูกจำกัด

Recap

  • อ่าน ProcessHandle.onExit
  • แทนที่ busy-wait ด้วย onExit().thenAccept(...)
  • ใส่ timeout บน future ถ้าเป็นงานที่ต้องตอบผู้ใช้
  • ทดสอบบน OS เป้าหมาย