在Java 9 Process API中,负责控制和管理操作系统进程的API已得到很大改进。 ProcessHandle类提供了检查进程活动性和销毁进程的方法。它具有onExit方法,CompletableFuture类可以在进程退出时异步执行操作。
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));
</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"Start time: %s%n"</span><span class="pun">,</span><span class="pln">
info</span><span class="pun">.</span><span class="pln">startInstant</span><span class="pun">().</span><span class="pln">map</span><span class="pun">(</span><span class="pln">i </span><span class="pun">-></span><span class="pln"> i</span><span class="pun">.</span><span class="pln">atZone</span><span class="pun">(</span><span class="typ">ZoneId</span><span class="pun">.</span><span class="pln">systemDefault</span><span class="pun">())</span><span class="pln">
</span><span class="pun">.</span><span class="pln">toLocalDateTime</span><span class="pun">().</span><span class="pln">toString</span><span class="pun">()).</span><span class="pln">orElse</span><span class="pun">(</span><span class="pln">np</span><span class="pun">));</span><span class="pln">
</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"Arguments : %s%n"</span><span class="pun">,</span><span class="pln">
info</span><span class="pun">.</span><span class="pln">arguments</span><span class="pun">().</span><span class="pln">map</span><span class="pun">(</span><span class="pln">a </span><span class="pun">-></span><span class="pln"> </span><span class="typ">Stream</span><span class="pun">.</span><span class="kwd">of</span><span class="pun">(</span><span class="pln">a</span><span class="pun">).</span><span class="pln">collect</span><span class="pun">(</span><span class="pln">
</span><span class="typ">Collectors</span><span class="pun">.</span><span class="pln">joining</span><span class="pun">(</span><span class="str">" "</span><span class="pun">))).</span><span class="pln">orElse</span><span class="pun">(</span><span class="pln">np</span><span class="pun">));</span><span class="pln">
</span><span class="typ">System</span><span class="pun">.</span><span class="kwd">out</span><span class="pun">.</span><span class="pln">printf</span><span class="pun">(</span><span class="str">"User : %s%n"</span><span class="pun">,</span><span class="pln"> info</span><span class="pun">.</span><span class="pln">user</span><span class="pun">().</span><span class="pln">orElse</span><span class="pun">(</span><span class="pln">np</span><span class="pun">));</span><span class="pln">
}
}
您将看到以下输出。
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