Matar procesos en Windows (taskkill)
Introducción
La forma más común para matar procesos en Windows seguramente sea utilizando el administrador de tareas, en la pestaña de “Procesos”, haciendo click derecho en el proceso que queremos cerrar por la fuerza:

Si utilizamos Windows XP Professional (o Windows Vista), podemos utilizar el comando taskkill para terminar (de forma forzada si así lo necesitamos) un proceso por su id, su nombre o por filtros menos selectivos. Inclusive se puede utilizar para matar procesos de sistemas remotos. Entre las opciones para seleccionar el proceso a terminar, tenemos las más simples como ser por PID (process id) o nombre de imagen. También tenemos la posibilidad de utilizar un sistema de filtros, para los cuales el comando nos ofrece algunos nombres de variables y una lista de operadores para poder hacer comparaciones (por ejemplo, para terminar todos los procesos de un usuario, o para terminar los procesos que exceden cierto límite de uso de memoria RAM).
Ejemplos de uso
Veamos algunos ejemplos de uso:
- TASKKILL /PID 1230 /PID 1241 /PID 1253: termina los procesos con PID 1230, 1241 y 1253.
- TASKKILL /F /IM notepad.exe /IM mspaint.exe: termina de manera forzada los procesos con nombre de imagen “notepad.exe” o “mspaint.exe”.
- TASKKILL /S otra-pc /F /IM notepad.exe: termina los bloc de notas en la PC de la red llamada “otra-pc”.
- TASKKILL /F /FI “PID ge 1000″ /FI “WINDOWTITLE ne untitle*”: termina de manera forzada los procesos que tengan un PID mayor o igual a 1000, y además el título de la ventana no empiece con “untitle”. Notar que se puede utilizar un caracter de comodín (*) en los filtros, lo que facilita el uso de filtros menos selectivos. También se pueden utilizar varios filtros, para que el comando haga la intersección de los filtros.
- TASKKILL /F /FI “USERNAME eq NT AUTHORITY\SYSTEM” /IM notepad.exe: termina de manera forzada los procesos con nombre de imagen “notepad.exe” que fueron iniciados por el usuario “NT AUTHORITY\SYSTEM”.
- TASKKILL /S otra-pc /U dominio\usuario /FI “USERNAME ne NT*” /IM *: Utilizando el usuario “dominio\usuario”, termina de forma remota todos los procesos de los usuarios que su nombre no empiece con “NT” en la PC de la red llamada “otra-pc”. Si es necesario, pedirá que se ingrese la contraseña del usuario.
- TASKKILL /S otra-pc /U nombreusuario /P contraseña”: Si no se ingresan filtros al invocar taskkill para un sistema remoto, el comando apaga la computadora remota (siempre y cuando el usuario tenga permisos para hacerlo)
La salida del comando es un listado de los procesos terminados en caso de que alguno cumpliera con el filtro:
C:\>TASKKILL /F /FI "PID ge 3599" /FI "IMAGENAME eq fdm.exe*" Correcto: se terminó el proceso con PID 3600.
O un aviso si ningún proceso cumplió el filtro especificado:
C:\>TASKKILL /F /FI "PID ge 3599" /FI "IMAGENAME eq FOXIT*" INFORMACIÓN: no hay tareas ejecutándose con los criterios especificados.
¿Y para Windows NT o 2000?
Para sistemas basados en Windows NT y 2000 vale la pena ver PsKill (link), una utilidad similar a taskkill.
Acceso directo para “limpiar” procesos que no responden
Una idea muy interesante es crear un acceso directo para matar de forma forzada todos los procesos que hayan dejado de responder. Esto es bastante simple, lo hacemos poniendo como comando del acceso directo lo siguiente:
taskkill.exe /f /fi "status eq not responding"
Sintaxis completa
La ayuda completa del comando taskkill es la siguiente:
C:\ >taskkill /?
TASKKILL [/S sistema] [/U usuario [/P contraseña]]
{ [/FI filtro] [/PID IdProceso | /IM NombreImagen] } [/F] [/T]
Descripción:
Esta herramienta de la línea de comandos puede usarse en uno o más
procesos.
Los procesos pueden terminarse a través del Id. o del nombre de imagen.
Lista de parámetros:
/S sistema Especifica el sistema remoto al que conectarse.
/U [dominio\]usuario Especifica el contexto de usuario en el que se que el comando debe ejecutarse.
/P contraseña Especifica la contraseña para el contexto de usuario dado. Pide la entrada si se omite.
/F Especifica la terminación forzada de proceso(s).
/FI filtro Especifica un conjunto de tarea que coinciden con el criterio especificado en el filtro.
/PID Id. de proceso Especifica el ID. de proceso que se debe terminar.
/IM nombre de imagen Especifica el nombre de imagen del proceso que debe terminar. El carácter comodín "*" puede usarse para especificar todos los nombres de imagen.
/T Terminar árbol: termina el proceso especificado y todos los procesos secundarios iniciados por él.
/? Muestra el uso de la ayuda.
Filtro(s):
Nombre filtro Operadores válidos Valores válidos
------------- ------------------ ---------------
STATUS eq, ne RUNNING | NOT RESPONDING
IMAGENAME eq, ne Nombre de imagen.
PID eq, ne, gt, lt, ge, le Valor de PID.
SESSION eq, ne, gt, lt, ge, le Número de sesión
CPUTIME eq, ne, gt, lt, ge, le Tiempo válido en el formato
hh:mm:ss.
hh - horas,
mm - minutos, ss - segundos
MEMUSAGE eq, ne, gt, lt, ge, le Uso de memoria en KB.
USERNAME eq, ne Nombre de usuario en formato
[dominio\]usuario.
MODULES eq, ne Nombre de DLL
SERVICES eq, ne Nombre de servicio.
WINDOWTITLE eq, ne Título de ventana.
Nota: el carácter comodín "*" del modificador /IM se acepta solamente
con filtros.
Nota: los procesos remotos siempre se terminarán de manera forzada
sin tener en cuenta si la opción /F se ha especificado o no.
Posts relacionados (generados automáticamente):

Por ejemplo lo que deseo es matar el explorer y todos los procesos que cuelgan de él exceptuando la aplicación cmd que me la mata tambien.
El comando para cerrar el explorer con las aplicaciones vinculadas sería
taskkill /f /t explorer.exe
pero no se como hacer para que me las cierre todas exceptuando esa
Mmm, no me doy cuenta cómo podría ser… probé:
taskkill /F /T /PID [PID_del_explore.exe] /fi “PID ne [PID_del_cmd.exe]”
pero mató todo el arbol de procesos, sin tomar en cuenta el filtro que agregué.
Si encuentras una solución, ¡será bienvenida!
Saludos,
José