কম্পিউটার টিউটোরিয়াল

জাভা ৯-এ Process API ব্যবহার করে প্রসেস টার্মিনেট/ডিস্ট্রয় কীভাবে করবেন?

জাভা ৯-এ, Process API একটি প্রসেস সম্পর্কে অনেক ইনফরমেশন পাওয়ার সহজ পথ প্রদান করে। ProcessHandle ইন্টারফেস নেটিভ প্রসেস আইডেন্টিফাই ও কন্ট্রোল প্রদান করে এবং প্রসেস লাইভনেস চেক ও ডিস্ট্রয় করার মেথড, অন্যদিকে ProcessHandle.Info ইন্টারফেস একটি প্রসেসের ইনফরমেশন স্ন্যাপশট দেয়। আমাদের একটি প্রসেস ডিস্ট্রয় করতে হলে ProcessHandle ইন্টারফেসের destroy() মেথড ব্যবহার করতে হয়।

উদাহরণ: ProcessHandle ইন্টারফেস ব্যবহার করে প্রসেস টার্মিনেট

import java.io.File;
import java.io.IOException;
import java.util.Objects;

public class DestroyProcessTest {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("---------------------------");
        System.out.println("Destroy Process:");
        final String javaCmd = getJavaCmdFromParent();
        final String classpath = getClassPathFromParent();
        try {
            final Process process = new ProcessBuilder(javaCmd, "-cp", classpath, DestroyProcessTest.class.getName()).start();
            ProcessHandle processHandle = process.toHandle();
            printInfo(processHandle);
            destroyProcess(processHandle);
            Thread.sleep(1000);
            System.out.println("---------------------------");
            System.out.println("After destroying the process:");
            printInfo(processHandle);
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
    private static String getClassPathFromParent() {
        return System.getProperty("java.class.path", "./*");
    }
    private static String getJavaCmdFromParent() {
        return Objects.isNull(System.getProperty("java.home")) ? "java" : String.format("%s%sbin%sjava", System.getProperty("java.home"), File.separator, File.separator);
    }
    private static void destroyProcess(ProcessHandle processHandle) throws IllegalStateException {
        System.out.println("Ready to destroy Process with id: " + processHandle.pid());
        processHandle.destroy();
    }
    private static void 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.arguments().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());
    }
}

আউটপুট

---------------------------
Destroy Process:
---------
Id: 4384
isAlive(): true
isSupportsNormalTermination(): false
Info: [user: Optional[Tutorialspoint\User], cmd: C:\Program Files\Java\jdk-9.0.4\bin\java.exe, startTime: Optional[2020-03-06T10:58:53.210Z], totalTime: Optional[PT0.046875S]]
Info arguments().isPresent(): false
Info command().isPresent(): true
Info totalCpuDuration().isPresent(): true
Info user().isPresent(): true
Ready to destroy Process with id: 4384
---------------------------
After destroying the process:
---------
Id: 4384
isAlive(): false
isSupportsNormalTermination(): false
Info: [user: Optional[Tutorialspoint\User], startTime: Optional[2020-03-06T10:58:53.210Z], totalTime: Optional[PT0.109375S]]
Info arguments().isPresent(): false
Info command().isPresent(): false
Info totalCpuDuration().isPresent(): true
Info user().isPresent(): true
  1. জাভা ৯-এ প্রসেস API-র স্ন্যাপশট ইনফরমেশন পাওয়ার পদ্ধতি

  2. জাভা ৯-এ ProcessBuilder ব্যবহার করে প্রসেস তৈরি করার পদ্ধতি

  3. JSON-lib API দিয়ে কলেকশন থেকে JSON অ্যারে কনভার্ট

  4. জাভাতে স্ট্রিমিং API ব্যবহার করে JSON স্ট্রিং পার্স কীভাবে করবেন?