Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

จะยุติ / ทำลายกระบวนการโดยใช้ Process API ใน Java 9 ได้อย่างไร


ใน Java 9 ประมวลผล API รองรับวิธีง่ายๆ ในการรับข้อมูลมากมายเกี่ยวกับกระบวนการ ตัวจัดการกระบวนการ อินเทอร์เฟซสามารถระบุและให้การควบคุมของกระบวนการดั้งเดิมและวิธีการตรวจสอบความสดของกระบวนการและทำลายกระบวนการในขณะที่ ProcessHandle.Info อินเทอร์เฟซสามารถให้ภาพรวมข้อมูลของกระบวนการได้ เราจำเป็นต้องทำลายกระบวนการโดยใช้ destroy() วิธีการของ ProcessHandle อินเทอร์เฟซ

ในตัวอย่างด้านล่าง เราจำเป็นต้องยุติกระบวนการโดยใช้ ProcessHandle อินเทอร์เฟซ

ตัวอย่าง

<ก่อนหน้า> นำเข้า java.io.File; นำเข้า java.io.IOException; นำเข้า java.util.Objects; คลาสสาธารณะ DestroyProcessTest { โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น InterruptedException { System.out.println ("-- -----------------------------------"); System.out.println("ทำลายกระบวนการ:"); สตริงสุดท้าย javaCmd =getJavaCmdFromParent(); classpath สตริงสุดท้าย =getClassPathFromParent(); ลอง { ขั้นสุดท้าย กระบวนการ กระบวนการ =ใหม่ ตัวสร้างกระบวนการ (javaCmd, "-cp", classpath, DestroyProcessTest.class.getName() ).เริ่ม(); ProcessHandle processHandle =กระบวนการtoHandle(); printInfo(กระบวนการจัดการ); destroyProcess(กระบวนการจัดการ); เธรด. สลีป (1000); System.out.println("---------------------------"); System.out.println("หลังจากทำลายกระบวนการ:"); printInfo(กระบวนการจัดการ); } จับ (IOException จ) { e.printStackTrace (); } } สตริงคงที่ส่วนตัว getClassPathFromParent () { ส่งคืน System.getProperty ("java.class.path", "./*"); } สตริงคงที่ส่วนตัว getJavaCmdFromParent () { return Objects.isNull(System.getProperty("java.home")) ? "java":String.format("%s%sbin%sjava", System.getProperty("java.home"), File.separator, File.separator); } โมฆะคงที่ส่วนตัว destroyProcess (ProcessHandle processHandle) พ่น IllegalStateException { System.out.println ("พร้อมที่จะทำลายกระบวนการด้วย id:" + processHandle.pid ()); processHandle.ทำลาย(); } โมฆะคงที่ส่วนตัว printInfo (ProcessHandle processHandle) { System.out.println ("---------"); System.out.println("Id:" + processHandle.pid() ); System.out.println("isAlive():" + processHandle.isAlive() ); System.out.println("isSupportsNormalTermination():" + processHandle.supportsNormalTermination() ); ProcessHandle.Info processInfo =processHandle.info(); System.out.println("Info:" + processInfo.toString() ); System.out.println("Info arguments().isPresent():" + processInfo. ข้อโต้แย้ง() .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() ); }}

ผลลัพธ์

----------------------------- ทำลายกระบวนการ:--------- ID:4384isAlive() :trueisSupportsNormalTermination():falseInfo:[ผู้ใช้:ทางเลือก[Tutorialspoint\User], cmd:C:\Program Files\Java\jdk-9.0.4\bin\java.exe, startTime:ทางเลือก[2020-03-06T10:58] :53.210Z], totalTime:ตัวเลือก[PT0.046875S]]Info arguments().isPresent():falseInfo command().isPresent():trueInfo totalCpuDuration().isPresent():trueInfo user().isPresent():true พร้อมทำลาย Process ด้วย id:4384 ---------------------------- หลังจากทำลาย Process:---------Id :4384isAlive():falseisSupportsNormalTermination():falseInfo:[ผู้ใช้:ทางเลือก[Tutorialspoint\User], startTime:ตัวเลือก[2020-03-06T10:58:53.210Z], totalTime:ทางเลือก[PT0.109375S]]Infoอาร์กิวเมนต์() .isPresent():falseInfo command().isPresent():falseInfo totalCpuDuration().isPresent():trueInfo user().isPresent():true