В данной статье мы рассмотрим улучшения, касающиеся Process API, которые были внесены в Java 9.
Мы затронем:
- данные о текущем процессе
- перечисление активных процессов
Данные о текущем процессе
Используя класс Process API мы имеем возможность:
- запустить процесс
- получить данные процесса (ID, имя и т.д.)
- и т.д.
Рассмотрим простой пример:
package net.proselyte.java9.processes;
import java.io.IOException;
import java.time.ZoneId;
public class ProcessDemo {
public static void main(String[] args) throws IOException {
ProcessBuilder processBuilder = new ProcessBuilder("nano");
Process process = processBuilder.start();
ProcessHandle.Info processInfo = process.info();
System.out.println("Process information:");
System.out.println("ID: " + process.pid());
System.out.println("Name: " + processInfo.command());
System.out.println("User: " + processInfo.user());
System.out.println("Start time: " + processInfo.startInstant()
.map(i -> i.atZone(ZoneId.systemDefault()).toLocalDate()));
System.out.println("CPU Duration: " + processInfo.totalCpuDuration());
}
}
В результате выполнения данное команды мы получим, примерно, следующий результат:
Process information:
ID: 27940
Name: Optional[/bin/nano]
User: Optional[proselyte]
Start time: Optional[2018-06-25]
Optional[PT0.02S]
Process finished with exit code 0
Данные об активных процессах
Мы также имеем возможность получать данные об активных процессах.
Рассмотрим простой пример:
package net.proselyte.java9.processes;
import java.util.stream.Stream;
public class LiveProcessesDemo {
public static void main(String[] args) {
Stream liveProcesses = ProcessHandle.allProcesses();
liveProcesses.filter(ProcessHandle::isAlive)
.forEach(ph -> {
System.out.println("ID" + ph.pid());
System.out.println("Info: " + ph.info().command());
System.out.println("\n======================\n");
});
}
}
В результате выполнения данной программы, мы получим, примерно, следующий результат:
...
======================
ID31857
Info: Optional[/usr/bin/nautilus]
======================
ID32041
Info: Optional[/home/proselyte/Programming/Soft/IDEA18/jre64/bin/java]
======================
ID32150
Info: Optional[/opt/google/chrome/chrome]
======================
...
На этом мы заканчиваем обзор нововведений Java 9, касающихся Process API.
В следующей статье мы рассмотрим улучшения, касающиеся класса CompletableFuture.