System Administration 4 min de lectura 3 de junio de 2026

Cómo finalizar procesos en PowerShell por nombre o PID

Domina la finalización de procesos en PowerShell por nombre o PID, y aprende a identificar reinicios automáticos.

Solución en "Dos Clics" (TL;DR)

Guía rápida para terminar procesos en PowerShell usando Stop-Process o taskkill, e identificar si un servicio los reinicia.

En mi día a día como profesional de TI en DOSCLIC, es común encontrarme con la necesidad de gestionar procesos en sistemas Windows, y PowerShell se ha convertido en mi herramienta predilecta. Recientemente, me enfrenté a un escenario donde necesitaba finalizar varias instancias de una aplicación interna, opencode-cli, que se mantenían activas y consumiendo recursos. Este artículo detalla los pasos y métodos que utilicé para resolverlo, incluyendo cómo identificar si un servicio o tarea está relanzando los procesos.

1. El Problema: Procesos Persistentes

Todo comenzó cuando noté que varias instancias de opencode-cli estaban ejecutándose en un servidor, incluso después de haber intentado cerrarlas de forma convencional. Para confirmar su estado y obtener sus identificadores, utilicé el comando Get-Process en PowerShell, filtrando por el nombre del proceso:

PowerShell
PS C:\Users\usuario_dosclic\.config\opencode> Get-Process opencode*

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
    304      49  1037144    1094476     358.34  20956   2 opencode-cli
    279      57  1329216     895596     187.63  23388   2 opencode-cli

Como se puede ver, había dos instancias de opencode-cli con PIDs 20956 y 23388 respectivamente, que necesitaban ser terminadas.

2. Métodos para Finalizar Procesos en PowerShell

PowerShell ofrece varias formas eficientes de finalizar procesos, ya sea por su nombre o por su ID de proceso (PID). A continuación, detallo las opciones que consideré y apliqué.

2.1. Usando Stop-Process por Nombre

El cmdlet Stop-Process es la forma nativa de PowerShell para terminar procesos. Si conozco el nombre exacto del proceso, puedo usar el parámetro -Name. El parámetro -Force es crucial para asegurar que el proceso se cierre sin pedir confirmación, incluso si está en un estado que normalmente requeriría intervención manual.

PowerShell
Stop-Process -Name opencode-cli -Force

2.2. Usando Stop-Process por ID de Proceso (PID)

En situaciones donde múltiples procesos tienen el mismo nombre o cuando necesito ser muy específico, finalizar por PID es la opción más segura. Cada proceso tiene un PID único, lo que garantiza que estoy terminando la instancia correcta. Para los procesos identificados, los comandos serían:

PowerShell
Stop-Process -Id 20956 -Force
PowerShell
Stop-Process -Id 23388 -Force

2.3. El Clásico taskkill de Windows

Aunque prefiero PowerShell, el comando taskkill de Windows sigue siendo una alternativa robusta y ampliamente conocida. También permite finalizar procesos por PID o por nombre de imagen. Para los PIDs específicos:

Terminal (CMD/PowerShell)
taskkill /PID 20956 /F
Terminal (CMD/PowerShell)
taskkill /PID 23388 /F

Si la intención es terminar todas las instancias de un proceso por su nombre de imagen (el ejecutable), taskkill también ofrece esa funcionalidad:

Terminal (CMD/PowerShell)
taskkill /IM opencode-cli.exe /F

El parámetro /F en taskkill es equivalente a -Force en Stop-Process, forzando la terminación del proceso.

3. Verificación y Detección de Reinicios Automáticos

Después de ejecutar cualquiera de los comandos anteriores, la primera acción es verificar que los procesos realmente se hayan detenido. Volví a usar Get-Process:

PowerShell
Get-Process opencode*

Si la salida no muestra ningún proceso opencode-cli, significa que la operación fue exitosa. Sin embargo, en ocasiones, un proceso puede reaparecer casi de inmediato después de ser terminado. Esto es una señal clara de que hay un mecanismo externo que lo está relanzando.

Error detectado: Si un proceso reaparece inmediatamente después de ser finalizado, es muy probable que un servicio de Windows, una tarea programada, un script de inicio o incluso otro proceso lo esté monitoreando y reiniciando. En estos casos, es fundamental identificar la fuente de reinicio para detenerla primero, y luego terminar el proceso de proceso de forma permanente.

Para investigar la causa de un reinicio automático, consideraría los siguientes puntos:

  • Servicios de Windows: Verificar si hay un servicio asociado a opencode que esté configurado para iniciar el ejecutable.
  • Tareas Programadas: Revisar el Programador de Tareas de Windows en busca de entradas que ejecuten opencode-cli.
  • Scripts de Inicio/Login: Buscar scripts en las políticas de grupo o en las carpetas de inicio de usuario que puedan estar lanzando la aplicación.
  • Aplicaciones de Terceros: Algunos gestores de aplicaciones o monitores pueden tener la capacidad de reiniciar procesos fallidos.
Consejo Práctico: Cuando un proceso se resiste a morir, el primer paso es siempre identificar su origen. Una vez que se detiene el servicio, la tarea o el script que lo relanza, el proceso principal podrá ser terminado de forma definitiva.