Muchas veces nos hemos encontrado con que al reiniciar servicios éstos se quedan “colgados” en estado “deteniendo” o “iniciando”.
Una forma para detener realmente estos servicios (o aplicaciones) es usando el par de comandos: tasklist y taskkill.
Nota para mis amigos Linuxeros: cualquier parecido con ps/kill es sólo coincidencia… supongo… :p
Los pasos son bastante simples:
1. Elegir el Objetivo.
Para poder usar taskKill necesito conocer el ID de proceso que quiero “eliminar”. Este proceso puede ser una aplicación o puede ser un servicio. Si estoy usando Windows 2008/R2 me basta con ir al administrador de tareas y en la lengüeta de “Procesos” o “Servicios” y leer desde ahí el Si es una aplicación es bastante fácil, pues me basta con ir al administrador de tareas (taskmanager) y obtener desde ahí el número de Proceso, o PID (Process ID).
Pero si estoy usando Windows 2003 Server, obtener el PID de un servicio es un poco más complejo.
A. Ejecutar desde la línea de comandos: tasklist. se obtiene una respuesta como la siguiente:
para poder filtrar por el nombre del servicio podemos usar el comando findstr para que busque el nombre del servicio “spool” en en la salida:
tasklist | findstr spool
y obtenemos el número del proceso: 1312
(si, ya se que parece powershell, pero en realidad no es nada nuevo!)
2. Dispara!
Ya sabemos que queremos pasar a mejor vida el proceso 1312, así que ahora simplemente ejecutamos:
taskkill /PID 1312 /F
Notas:
- El modificador /F es para “Forzar” la finalización del proceso.
- Como siempre es posible invocar los comandos seguidos de un “/?” para conocer todas las opciones.
- En el caso de eliminar un proceso con taskkill, solamente terminamos su ejecución, no estamos “borrando” el proceso, éste se volver a ejecutar cuando demos inicio nuevamente al proceso manualmente (más abajo) o al siguiente reinicio.
IMPORTANTE: este comando debe ser ejecutado con privilegios de administración, o con una interfaz de comandos ejecutada como administrador
De esta forma terminamos definitivamente con el proceso problemático, y ahora es posible darle inicio nuevamente usando el comando:
net start <nombre_proceso>
Finalmente, el servicio volvió a subir, pero esta vez con un nuevo PID, es decir, es un nuevo proceso para el sistema:
Espero que les sea de utilidad.
Gonzalo