ใน 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> คำสั่งที่เริ่ม processarguments() - Optional<String[]> อาร์กิวเมนต์startInstant() - Optional<Instant> เวลาเริ่มtotalCpuDuration() - Optional<Duration> CPU time สะสมuser() - Optional<String> ผู้ใช้ที่รัน process
ProcessHandle.allProcesses() คืน Stream ลืม (lazy) ประมวลผลได้ด้วย Stream API เหมาะสำหรับ monitoring และ system administration tools