I would like to kill a process in Java for an application in Java 1.4. ; I don't want to (can't) add some custom libraries so I will use 'Runtime' class to execute a DOS command:
tasklist: allow me to recover all processes running.
taskkill: allow me to destroy a process by its ID.
This is a Java class which will use these both commands to do the job:
KillProcess.java
| 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
public class KillProcess { 
      public static final int FIRST_COLUMN_LENGTH = 26; 
      /** 
      * pass all statements which must be found in the process description 
      *     process definition columns are: 
      *            - Image Name 
      *            - PID 
      *            - Session Name 
      *            - Session# 
      *            - Mem Usage 
      *            - Status 
      *            - User Name 
      *            - CPU Time 
      *            - Window Title 
      * @param args {String[]}: statements which must be found in the process description 
      * @throws IOException 
      */ 
      public static void kill(String[] args) throws IOException{ 
            int processId = 0; 
            // recover a file output from the DOS command 'tasklist' 
            // which list all running processes 
            Process process = Runtime.getRuntime().exec("tasklist /v"); 
            InputStream inputstream = process.getInputStream(); 
            InputStreamReader inputstreamreader = new InputStreamReader(inputstream); 
            BufferedReader bufferedreader = new BufferedReader(inputstreamreader); 
            String line; 
            while ((line = bufferedreader.readLine()) != null) { 
                  boolean blnFound = true; 
                  // loop on all statements to verify if the line contains it 
                  for (int i=0;i 
                        if (line.indexOf(args[i])<0){ 
                              blnFound = false; 
                        } 
                  } 
                  if (blnFound){ 
                        line = line.substring(FIRST_COLUMN_LENGTH); 
                        while(line.charAt(0)==' '){ 
                              line=line.substring(1); 
                        } 
                        String strProcessId = line.substring(0, line.indexOf(' ')); 
                        processId = Integer.parseInt(strProcessId); 
                  } 
            } 
            // verify the process has been found 
            if (processId!=0){ 
                  // kill the process via 'taskkill' 
                  Runtime.getRuntime().exec("taskkill /pid " + processId + " /f"); 
                  System.out.println("The process "+processId+" has been killed!"); 
            } else{ 
                  System.out.println("Process not found!"); 
            } 
      } 
      public static void main(String[] args) throws IOException{ 
            kill(args); 
      } 
} | 
This is an example of class use which will kill my IrfanView process ...
| 
java KillProcess i_view32.exe IrfanView | 
 
No comments:
Post a Comment