Java 9 - Cải tiến API quy trình

Trong Java 9 Process API chịu trách nhiệm kiểm soát và quản lý các quy trình của hệ điều hành đã được cải thiện đáng kể. ProcessHandle Class hiện cung cấp ID quy trình gốc của quy trình, thời gian bắt đầu, thời gian CPU tích lũy, đối số, lệnh, người dùng, quy trình mẹ và con cháu. Lớp ProcessHandle cũng cung cấp phương pháp để kiểm tra tính sống của các quy trình và hủy các quy trình. Nó có phương thức onExit, lớp CompletableFuture có thể thực hiện hành động không đồng bộ khi quá trình thoát.

Tester.java

import java.time.ZoneId;
import java.util.stream.Stream;
import java.util.stream.Collectors;
import java.io.IOException;

public class Tester {
   public static void main(String[] args) throws IOException {
      ProcessBuilder pb = new ProcessBuilder("notepad.exe");
      String np = "Not Present";
      Process p = pb.start();
      ProcessHandle.Info info = p.info();
      System.out.printf("Process ID : %s%n", p.pid());
      System.out.printf("Command name : %s%n", info.command().orElse(np));
      System.out.printf("Command line : %s%n", info.commandLine().orElse(np));

      System.out.printf("Start time: %s%n",
         info.startInstant().map(i -> i.atZone(ZoneId.systemDefault())
         .toLocalDateTime().toString()).orElse(np));

      System.out.printf("Arguments : %s%n",
         info.arguments().map(a -> Stream.of(a).collect(
         Collectors.joining(" "))).orElse(np));

      System.out.printf("User : %s%n", info.user().orElse(np));
   } 
}

Đầu ra

Bạn sẽ thấy kết quả sau.

Process ID : 5800
Command name : C:\Windows\System32\notepad.exe
Command line : Not Present
Start time: 2017-11-04T21:35:03.626
Arguments : Not Present
User: administrator