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 ปิดบังฟิลด์