English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في Java 9 قبل، كان API لـ Process مازال يفتقر إلى دعم أساسي لاستخدام العمليات المحلية، مثل الحصول على PID للعمليات والمالك، وقت بدء العمليات، كم من وقت CPU يستخدمها العمليات، كم عدد العمليات المحلية التي تعمل وما إلى ذلك.
أضاف Java 9 واجهة ProcessHandle إلى API Process لتحسين فئة java.lang.Process.
يمكن استخدام واجهة ProcessHandle للتحديد العملية المحلية وعرض حالة العملية وإدارة العملية.
يحتوي واجهة ProcessHandle على واجهة Info لتجنب الضرورة المستمرة لاستخدام الكود المحلي للحصول على PID للعملية المحلية.
لا يمكن تقديم تنفيذ لوسائل الاعلام. إذا كنا نريد تقديم وسيلة抽象ة ومجموعة من وسائل الاعلام غير الافتراضية (وسائل الاعلام والتنفيذ)، فإننا يجب أن نستخدم فئة الوسائل الاعلامية.
يمكن استخدام طريقة onExit() المعلن عنها في واجهة ProcessHandle للتحكم في بعض العمليات عند إنهاء عملية معينة.
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: %n", p.pid()); System.out.printf("Command name: %n", info.command().orElse(np)); System.out.printf("Command line: %n", info.commandLine().orElse(np)); System.out.printf("Start time: %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)); } }
The output result of the above example is:
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