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ức | Trả về | Mô tả |
|---|---|---|
pid() | long | Native process ID |
parent() | Optional<ProcessHandle> | Process cha |
children() | Stream<ProcessHandle> | Direct children |
descendants() | Stream<ProcessHandle> | All descendants (đệ quy) |
info() | ProcessHandle.Info | Snapshot thông tin: command, args, startTime, cpuDuration, user |
isAlive() | boolean | Process còn sống? |
destroy() | boolean | Terminate gracefully (SIGTERM) |
destroyForcibly() | boolean | Kill 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.