Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách truy xuất dữ liệu tất cả process của Process API trong Java 9

Java 9 Process API quản lý, kiểm soát OS process. ProcessHandle cung cấp: native PID, start time, CPU time, arguments, command, user, parent process, descendants. Kiểm tra liveness, destroy process. Lấy tất cả ProcessHandle dưới dạng stream bằng allProcesses().

Ví dụ: Liệt kê tất cả 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());
    }
}

Kết quả mẫu

---------------------------
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
... (các process khác: Chrome, Firefox, conhost, java.exe...)

ProcessHandle.Info – Thông tin chi tiết

Phương thứcTrả vềMô tả
command()Optional<String>Command line executable path
arguments()Optional<String[]>Command line arguments
startInstant()Optional<Instant>Thời gian start process
totalCpuDuration()Optional<Duration>Tổng CPU time tiêu thụ
user()Optional<String>User sở hữu process

Ứng dụng thực tế

  • Monitoring tool: Theo dõi process hệ thống.
  • Process manager: Kill process treo, zombie.
  • Resource analysis: CPU, memory per process.
  • Container orchestration: Sidecar monitor process.

ProcessHandle.allProcesses() trả về snapshot tại thời điểm gọi – không live view. Cần gọi lại để refresh.