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

Cách lấy parent process của Process API trong Java 9

ProcessHandle interface (Java 9) cho phép thực hiện hành động và kiểm tra trạng thái process. Cung cấp: native PID, start time, CPU time, user, parent process, descendants.

Lấy parent process bằng phương thức parent() – trả về Optional<ProcessHandle>. Rỗng nếu không có parent hoặc parent không khả dụng.

Cú pháp

Optional<ProcessHandle> parent()

Ví dụ: Launch notepad và in parent PID

import java.io.*;

public class ParentProcessTest {
    public static void main(String args[]) {
        try {
            Process notepadProcess = new ProcessBuilder("notepad.exe").start();
            ProcessHandle parentHandle = notepadProcess.toHandle().parent().get();
            System.out.println("Parent Process Native PID: " + parentHandle.pid());
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

Kết quả

Parent Process Native PID : 7108

Các phương thức hữu ích của ProcessHandle

Phương thứcTrả vềMô tả
pid()longNative process ID
parent()Optional<ProcessHandle>Process cha
children()Stream<ProcessHandle>Direct children
descendants()Stream<ProcessHandle>All descendants (đệ quy)
info()ProcessHandle.InfoSnapshot thông tin: command, args, startTime, cpuDuration, user
isAlive()booleanProcess còn sống?
destroy()booleanTerminate gracefully (SIGTERM)
destroyForcibly()booleanKill ngay (SIGKILL)
onExit()CompletableFuture<ProcessHandle>Callback khi process kết thúc

Lưu ý

  • parent() có thể rỗng nếu process là init (PID 1) hoặc parent đã exit.
  • Cần quyền OS để truy cập process của user khác.
  • ProcessHandle.Info các getter trả về Optional (có thể absent).

Process API Java 9 thay thế hacks JNI/Runtime.exec() cũ, cung cấp API chuẩn, cross-platform quản lý process.