นากกายกำลังเปิดบัตรประวัติเครื่องจักรบนคลิปบอร์ด ดูเวลาเริ่มและคำสั่งล่าสุด

Java ProcessHandle.Info: อ่านคำสั่งและเวลาเริ่มของโปรเซสแบบ snapshot

น้องกายEngineering

เวลาทำ health check ใน JVM เราอยากรู้ว่าโปรเซสลูกยังเป็นตัวเดิมไหมครับ ProcessHandle.Info ให้ snapshot ของคำสั่ง ผู้ใช้ และเวลาเริ่ม แต่ทุกฟิลด์เป็น Optional เพราะ OS อาจไม่ยอมเปิดเผย

WHY: อย่าเดาจาก PID อย่างเดียว

PID หมุนซ้ำได้หลังโปรเซสจบ เหมือนเบอร์คิวร้านข้าวที่เปิดรอบใหม่ การผูก startInstant ช่วยแยกคนละตัวได้ดีขึ้น

HOW: อ่าน info ของโปรเซสปัจจุบัน

import java.lang.ProcessHandle.Info;
import java.util.Optional;

public class Main {
  public static void main(String[] args) {
    Info info = ProcessHandle.current().info();
    Optional<String> command = info.command();
    Optional<?> start = info.startInstant();
    assert command != null;
    assert start != null;
    assert info.user().isPresent() || info.user().isEmpty();
  }
}

อย่าเรียก get() ตรงๆ โดยไม่เช็ก OS บางชุดคืน empty สำหรับ arguments หรือ commandLine ให้มี fallback เช่นอ่านจากไฟล์ config ที่คุณควบคุมเอง

Recap

  • ใช้ ProcessHandle.Info เป็น snapshot ไม่ใช่สตรีมสด
  • ทุกฟิลด์เป็น Optional — รองรับ empty
  • อย่าระบุตัวตนโปรเซสด้วย PID อย่างเดียว
  • มีแหล่งข้อมูลสำรองเมื่อ OS ปิดบังฟิลด์