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

วิธีดึงข้อมูล process ทั้งหมดของ Process API ใน Java 9

ใน Java 9 Process API ใช้ควบคุมและจัดการ operating system processes ProcessHandle class ให้ process's native process ID start time accumulated CPU time arguments command user parent process และ descendants ยังมีเมธอดตรวจสอบ liveness และ destroy processes ดึงข้อมูล ProcessHandle ทั้งหมดเป็น stream ด้วยเมธอด allProcesses()

ตัวอย่าง: ดึงข้อมูล process ทั้งหมด

import java.util.stream.Stream;
import java.util.Optional;

public class AllProcessesTest {
    public static void main(String args[]) throws InterruptedException {
        System.out.println("---------------------------");
        System.out.println("All Processes:");
        
        Stream<ProcessHandle> processStream = ProcessHandle.allProcesses();
        processStream.forEach(process -> printInfo(process));
    }
    
    private static void printInfo(ProcessHandle processHandle) {
        System.out.println("---------");
        System.out.println("Id: " + processHandle.pid());
        System.out.println("isAlive(): " + processHandle.isAlive());
        System.out.println("number of childrens: " + processHandle.children().count());
        System.out.println("isSupportsNormalTermination(): " + processHandle.supportsNormalTermination());
        
        ProcessHandle.Info processInfo = processHandle.info();
        System.out.println("Info: " + processInfo.toString());
        System.out.println("Info arguments().isPresent(): " + processInfo.arguments().isPresent());
        System.out.println("Info command().isPresent(): " + processInfo.command().isPresent());
        System.out.println("Info totalCpuDuration().isPresent(): " + processInfo.totalCpuDuration().isPresent());
        System.out.println("Info user().isPresent(): " + processInfo.user().isPresent());
    }
}

ผลลัพธ์ (ตัวอย่าง)

---------------------------
All Processes:
---------
Id: 7056
isAlive(): true
number of childrens: 0
isSupportsNormalTermination(): false
Info: [user: Optional[Tutorialspoint\User], cmd: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe, startTime: Optional[2020-03-09T03:26:00.406Z], totalTime: Optional[PT1M52.15625S]]
Info arguments().isPresent(): false
Info command().isPresent(): true
Info totalCpuDuration().isPresent(): true
Info user().isPresent(): true
... (processes อื่นๆ)

ProcessHandle.Info Methods

  • command() - Optional<String> คำสั่งที่เริ่ม process
  • arguments() - Optional<String[]> อาร์กิวเมนต์
  • startInstant() - Optional<Instant> เวลาเริ่ม
  • totalCpuDuration() - Optional<Duration> CPU time สะสม
  • user() - Optional<String> ผู้ใช้ที่รัน process

ProcessHandle.allProcesses() คืน Stream ลืม (lazy) ประมวลผลได้ด้วย Stream API เหมาะสำหรับ monitoring และ system administration tools