Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความสำคัญของอินเทอร์เฟซ ProcessHandle ใน Java 9

ProcessHandle interface นำมารวมใน Java 9 อนุญาตให้ดำเนินการและตรวจสอบสถานะของ process ที่เกี่ยวข้อง interface นี้ให้ process's native process ID (pid) start time accumulated CPU time arguments command user parent process และ descendants

การดำเนินการที่ ProcessHandle รองรับ

  • คืน ProcessHandle.Info ข้อมูลเพิ่มเติมของ process
  • PID ของ process
  • ตรวจสอบว่า alive หรือไม่
  • ดึง snapshot ของ direct children ของ process
  • ดึง snapshot ของ all descendants ของ process
  • ดึง snapshot ของ process ที่กำลังรันทั้งหมด
  • ทำลาย process (destroy)
  • คืน CompletableFuture พร้อม ProcessHandle เมื่อ process จบ

ProcessHandle.Info - ข้อมูลจาก snapshot

  • Command ของ process
  • Arguments ของ process
  • Command-line ของ process
  • Start time ของ process
  • CPU time ที่ process ใช้
  • User ของ process

ตัวอย่าง: PID และ isAlive

import java.util.Optional;

public class ProcessHandleTest {
    public static void main(String args[]) {
        long pid = ProcessHandle.current().pid();
        ProcessHandle currentProcess = ProcessHandle.current();
        System.out.println("PID: " + currentProcess.pid());
        
        Optional<ProcessHandle> processHandle = ProcessHandle.of(pid);
        boolean isAlive = processHandle.isPresent() && processHandle.get().isAlive();
        System.out.println(isAlive);
    }
}

ผลลัพธ์

PID: 6484
true

ProcessHandle.of() และ allProcesses()

// หา process จาก PID
Optional<ProcessHandle> ph = ProcessHandle.of(1234);

// Stream ของ process ทั้งหมด
Stream<ProcessHandle> all = ProcessHandle.allProcesses();
all.filter(p -> p.info().user().orElse("").equals("myuser"))
   .forEach(p -> System.out.println(p.pid() + " " + p.info().command().orElse("")));

ProcessHandle API ทำให้จัดการ process ระบบปฏิบัติการได้จาก Java โดยไม่ต้องใช้ JNI หรือ external commands