Hola!

En muchas ocupaciones queremos eliminar algún proceso específico o simplemente queremos saber que procesos están corriendo en nuestra máquina para luego poder gestionarlos. En este breve tutorial trataré de explicar un poco sobre el uso de los comandos TaskList y TaskKill, aunque no profundizaré en esto, también les mostrare una clase que he creado para hacer esto desde Java.

si quieres saber más sobre la documentación de TaskList y TaskKll ingresa a:

 

Comando TaskList

sintaxis:

tasklist [/s <Computer> [/u [\] [/p ]]] [{/m | /svc | /v}] [/fo {table | list | csv}] [/nh] [/fi [/fi [ ... ]]]

Tipo de Salida:

El parámetro /fo es una de las maravillas de tasklist, este nos permitirá dar formato que facilitará nuestro trabajo.

Este parámetro puede recibir los valores:  table | list | csv

Ejemplo:

tasklist /fo csv

Filtros:

El parámetro /fi nos da la posibilidad de filtrar los resultados que obtenemos.

Algunos de los filtros disponibles son:

STATUS | PID |SESSION

Ejemplo:

tasklist /fi "PID gt 100" /fi "STATUS eq running"

Con esta linea de comando obtendremos una lista de los procesos que están «running» y que su PID es mayor a 1000.

Información detallada (verbose):

Al especificar el parámetro /v en la ejecución de tasklist, se mostrará la información detallada de los procesos.

Ejemplo:

tasklist /v /fi "PID gt 100" /fo table

Esta línea de comando mostrará toda la información detallada, en formato de tabla, de los procesos con un PID mayor a 100.

Comando TaskKill

sintaxis:

taskkill [/s Computer] [/u Domain\User [/p Password]]] [/fi FilterName] [/pid ProcessID]|[/im ImageName] [/f][/t]

Filtros:

Al igual que tasklist, taskkill tiene el parámetro /fi  que permite cerrar todos los procesos que cumplan con dicho filtro.

Algunos de los filtros disponibles son:

STATUS | PID |SESSION

Ejemplo:

taskkill  /fi "PID eq 1523"

De esta manera taskkill intentará cerrar el proceso con el PID 1523.

Forzar cierre de procesos:

Al utilizar taskkill, sin usar este parámetro, taskkill solo enviara una solicitud de cierre al proceso que se desea cerrar; pero al utilizar el parámetro  /F los procesos serán forzados a cerrarse.

Cerrar subprocesos:

El parámetro /T permite cerrar también los subprocesos que se hayan iniciado desde el proceso padre.

Bien, Creo que con estos parámetros serán suficientes para esta práctica. Si desean que amplíe los ejemplos o explique otro parámetro, ya saben que pueden dejarlo en los comentarios de este Post.

Ya con la informacion del uso de la clase que nos permitira hacer esto desde java.

Actualmente no cuenta con todos las funciones necesarias, pero la ire actualizando.

El Proyecto Java esta disponible en GitHub

AministrarProcesosWindows4Java

public class Proceso {

        private int PID;
        private String Usomemoria;
        private String Nombre;
        private String NombreSession;
        private String numeroSession;
        private String Estado;
        private String TiempoCPU;
        private String nombreUsuario;
        private String TituloVentana;

        private Proceso() {
        }

       public boolean kill(){
            boolean res = false;
            String cmd = "cmd /c taskkill /pid "+this.PID+" /F /T"; // (/F) para forzar cierre (/T) Cerrar los procesos asociados 

            Runtime rt = Runtime.getRuntime();
            Process p = null;
            try {
                p = rt.exec(cmd);
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            BufferedReader brInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
            BufferedReader brError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

            String line;
            try {
                while ((line = brError.readLine()) != null) {
                    return false;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                while ((line = brInput.readLine()) != null) {
                    if (line.contains("Correcto") || line.contains("CORRECTO")) {
                        res = true;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                p.waitFor();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            p.destroy();
            return res;
   
       }
        
        public Proceso(String Nombre, int PID, String NombreSession, String numeroSession, String Usomemoria, String Estado, String nombreUsuario, String TiempoCPU, String TituloVentana) {
            this.Nombre = Nombre;
            this.PID = PID;
            this.NombreSession = NombreSession;
            this.numeroSession = numeroSession;
            this.Usomemoria = Usomemoria;
            this.Estado = Estado;
            this.nombreUsuario = nombreUsuario;
            this.TiempoCPU = TiempoCPU;
            this.TituloVentana =TituloVentana;
        }

        public String getNumeroSession() {
            return numeroSession;
        }

        public String getEstado() {
            return Estado;
        }

        public String getTiempoCPU() {
            return TiempoCPU;
        }

        public String getNombreUsuario() {
            return nombreUsuario;
        }

        public String getTituloVentana() {
            return TituloVentana;
        }

        public int getPID() {
            return PID;
        }

        public String getUsomemoria() {
            return Usomemoria;
        }

        public String getNombre() {
            return Nombre;
        }

        public String getNombreSession() {
            return NombreSession;
        }

        public static Proceso getProcesoByPID(String PID) {
            Proceso res = null;
            String cmd = "cmd /c tasklist  /fi \"pid eq " + PID + "\" /v /fo csv";

            Runtime rt = Runtime.getRuntime();
            Process p = null;
            try {
                p = rt.exec(cmd);
            } catch (IOException e) {
                e.printStackTrace();
            }

    
            BufferedReader brInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
            BufferedReader brError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

            String line;
            try {
                while ((line = brError.readLine()) != null) {
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                while ((line = brInput.readLine()) != null) {

                    if (line.contains(PID)) {
                        String[] spl = line.split("\",\"");
                        if (spl.length == 9) {
                            res = new Proceso(spl[0].replace("\"",""),Integer.parseInt(spl[1]),spl[2],spl[3],spl[4].replace("\"",""),spl[5],spl[6],spl[7],spl[8]);
                        }
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {
                p.waitFor();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            p.destroy();


            return res;
        }
    }

Uso

Obtener Proceso

Proceso miProceso = Proceso.getProcesoByPID("5236");

Matar Proceso

miProceso.kill();

Obtener Información de proceso

miProceso.getNombre(); // Nombre del proceso 
miProceso.getEstado(); // Estado actual del proceso 
miProceso.getTiempoCPU(); // Es una la cantidad de tiempo de CPU (ciclos) que se han utilizado desde el inicio del proceso 
miProceso.getNombreUsuario(); //Nombre de usuario que inicio el proceso (Propietario del proceso)
miProceso.getTituloVentana(); //Nombre del titulo de la ventana del proceso
miProceso.getPID(); // Numero de Identificación del proceso (PID) 
miProceso.getUsomemoria(); // Uso de RAM que consume el proceso 
miProceso.getNumeroSession(); // Numero de session 
miProceso.getNombreSession(); //Nombre de la session

Dejar respuesta

Please enter your comment!
Please enter your name here