Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 9의 JShell에서 pid, info, children 및 destroy 프로세스를 인쇄하는 방법은 무엇입니까?

<시간/>

JShell 클래스, 메소드, 인터페이스, 열거형 과 같은 간단한 Java 문을 실행하는 데 사용되는 Java Shell 도구입니다. 등. 평가하고 결과를 명령줄에 인쇄합니다. 프롬프트.

Java는 Process API를 개선했습니다. 운영 체제 프로세스를 관리하고 제어합니다. 프로세스 핸들 인터페이스는 기본 프로세스, 프로세스 를 확인하는 방법을 식별하고 제어합니다. 생동감 , 파기 프로세스 . ProcessHandle.Info 인터페이스는 정보 스냅샷 을 제공합니다. 프로세스입니다.

아래 코드 스니펫에서 pid를 인쇄할 수 있습니다. , 정보 , 어린이 , 파괴 프로세스 의 프로세스 API .in JShell 도구.

스니펫

jshell> ProcessHandle currentProcess = ProcessHandle.current();
currentProcess ==> 3960

jshell> System.out.println("Current Process Id: = " + currentProcess.pid());
Current Process Id: = 3960

jshell> currentProcess.info();
$3 ==> [user: Optional[Tutorialspoint\User], cmd: C:\Program Files\Java\jdk-9.0.4\bin\java.exe, startTime: Optional[2020-05-03T06:43:37.510Z], totalTime: Optional[PT1.265625S]]

jshell> currentProcess.pid();
$4 ==> 3960

jshell> ProcessHandle.of(3960)
$5 ==> Optional[3960]

jshell> $5.get()
$6 ==> 3960

jshell> $6.info()
$7 ==> [user: Optional[Tutorialspoint\User], cmd: C:\Program Files\Java\jdk-9.0.4\bin\java.exe, startTime: Optional[2020-05-03T06:43:37.510Z], totalTime: Optional[PT1.390625S]]

jshell> Stream<ProcessHandle> childProc = ProcessHandle.current().children();
childProc ==> java.util.stream.ReferencePipeline$2@6895a785

jshell> childProc.count()
$10 ==> 1

jshell> childProc.forEach(procHandle -> { System.out.println(procHandle.destroy() ? "Could not kill process " + procHandle.pid() : "Terminated " + procHandle.pid()); });

|   java.lang.IllegalStateException thrown: stream has already been operated upon or closed
|      at AbstractPipeline.evaluate (AbstractPipeline.java:229)
|      at ReferencePipeline.forEach (ReferencePipeline.java:430)
|      at (#11:1)