¿Cómo detener/reiniciar efectivamente un servicio o aplicación que está “colgado”?

Muchas veces nos hemos encontrado con que al reiniciar servicios éstos se quedan “colgados” en estado “deteniendo” o “iniciando”.

image

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).

image

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:

image

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

image

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

image

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

image 

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:

image

Espero que les sea de utilidad.

Gonzalo