Para qué sirve Stop-Process de PowerShell y cómo dominarlo

Última actualización: 17/12/2025
Autor: Isaac
  • Stop-Process es el cmdlet de PowerShell para detener procesos locales por nombre, ID o mediante objetos Process, integrándose fácilmente con otros cmdlets como Get-Process.
  • Sus parámetros clave (-Id, -Name, -InputObject, -Confirm, -Force, -PassThru y -WhatIf) permiten controlar de forma precisa qué procesos se cierran, cómo se confirma la acción y qué información se devuelve.
  • Combinado con filtros (Where-Object), alias, gestión de errores y otros cmdlets de administración, Stop-Process se convierte en una herramienta potente para automatizar el cierre seguro y selectivo de procesos en Windows.

Stop-Process de PowerShell

Si trabajas con Windows a diario, tarde o temprano vas a tener que matar un proceso rebelde desde la consola. Puedes hacerlo con el viejo CMD, pero donde de verdad se vuelve cómodo y potente es con PowerShell y, en concreto, con el cmdlet Stop-Process, pensado precisamente para detener procesos en ejecución.

Más allá del típico ejemplo de cerrar el Bloc de notas, Stop-Process es una herramienta clave para administrar procesos de forma masiva, automatizada y segura, ya sea en tu propio PC o en un entorno corporativo. Vamos a ver con detalle para qué sirve, cómo se usa y qué trucos prácticos puedes aplicar en tu día a día para sacarle todo el partido.

¿Qué es Stop-Process en PowerShell y para qué sirve?

En PowerShell, Stop-Process es un cmdlet diseñado para finalizar uno o varios procesos que se estén ejecutando en el equipo local. Es el equivalente avanzado a «matar tarea» del Administrador de tareas, pero accesible desde scripts y desde la línea de comandos.

Este cmdlet te permite detener procesos por nombre, por ID (PID) o pasando directamente objetos de tipo Process. Además, puedes integrarlo con otros cmdlets como Get-Process, Where-Object o pipes para crear soluciones bastante sofisticadas, por ejemplo, matar solo determinados procesos bajo ciertas condiciones.

Algo importante: Stop-Process solo actúa sobre procesos del equipo local. No detiene procesos en máquinas remotas directamente; para esos escenarios necesitarías combinarlo con sesiones remotas de PowerShell u otras herramientas, pero el cmdlet en sí se limita al sistema donde se ejecuta.

En sistemas como Windows Vista y posteriores, si quieres parar procesos que no pertenecen al usuario actual (por ejemplo, servicios del sistema o procesos de otros usuarios), tendrás que abrir PowerShell con la opción Ejecutar como administrador. De lo contrario, verás errores de acceso denegado cuando intentes detener determinados procesos críticos.

Por defecto, cuando Stop-Process va a detener un proceso que no es tuyo, PowerShell puede pedir confirmación, salvo que fuerces el cierre o modifiques la configuración de preferencia de confirmaciones. Más adelante veremos cómo controlar este comportamiento con los parámetros -Confirm y -Force.

Sintaxis y formas de usar Stop-Process

Stop-Process admite varios conjuntos de parámetros, lo que te da distintas formas de indicar qué procesos quieres detener. Las más habituales son estas:

Detener procesos por Id (PID)

La forma más directa y precisa de referirte a un proceso es mediante su identificador de proceso (PID). La sintaxis general es:

Sintaxis (PID): Stop-Process <Int32[]>

El parámetro -Id acepta uno o varios PID (en forma de enteros). Si quieres detener varios procesos a la vez, puedes indicar los IDs separados por comas, por ejemplo -Id 1234, 5678. Para localizar los PID que te interesan, puedes usar Get-Process, que lista todos los procesos con su identificador.

Este conjunto de parámetros está definido como obligatorio en la posición 0, lo que significa que puedes omitir el nombre del parámetro -Id y simplemente escribir los números, por ejemplo: Stop-Process 3952. Aun así, utilizar expresamente -Id suele hacer los scripts más legibles.

Detener procesos por nombre

Si no te apetece ir a buscar los PID, puedes indicar los procesos por su nombre de ejecutable. La sintaxis para este caso es:

Sintaxis (Nombre): Stop-Process -Name <String[]>

El parámetro -Name acepta uno o varios nombres de proceso (por ejemplo, notepad, chrome…), e incluso permite comodines. Por ejemplo, -Name fi* detendría todos los procesos cuyos nombres empiecen por “fi”, como “firefox”.

Ten en cuenta que -Name es obligatorio en este conjunto de parámetros y tiene un alias muy útil: ProcessName. Además, aunque mucha gente escribe el nombre con “.exe”, en la práctica basta con indicar el nombre base (por ejemplo, notepad en lugar de notepad.exe).

Detener procesos pasando objetos (InputObject)

En escenarios algo más avanzados, puedes usar objetos de tipo Process como entrada directa a Stop-Process. Ahí entra en juego el parámetro -InputObject:

Sintaxis (InputObject): Stop-Process <Process[]>

Con este enfoque, sueles combinar Get-Process con el operador de canalización |, o almacenar previamente el proceso en una variable y luego pasarlo a Stop-Process. Este conjunto de parámetros permite entrada por canalización, lo que lo hace muy flexible al filtrar y tratar datos antes de detener el proceso.

Parámetros clave de Stop-Process y cómo usarlos bien

Además de indicar qué procesos quieres detener, Stop-Process incluye varios parámetros que controlan cómo se ejecuta la acción y qué información te devuelve. Entenderlos bien te ahorra sustos y hace tus scripts mucho más claros.

Parámetro -Confirm

El parámetro -Confirm sirve para que PowerShell te pida confirmación antes de ejecutar el cmdlet. Es un parámetro de tipo SwitchParameter, es decir, basta con incluirlo o no, sin necesidad de asignarle un valor.

Cuando lo añades, PowerShell muestra un mensaje con la acción que va a realizar (por ejemplo, “Stop-Process”) y el objetivo (el nombre del proceso y su PID) y te ofrece opciones típicas como Yes, Yes to All, No, etc. Este comportamiento es muy útil cuando estás deteniendo procesos críticos o varios a la vez y quieres revisar caso por caso.

  Cómo comprimir un Word o PowerPoint paso a paso

De forma predeterminada, el valor de -Confirm es False, es decir, no se pide confirmación explícita salvo que la política de confirmación del cmdlet así lo requiera para operaciones sensibles. Tienes además un alias para este parámetro: cf, aunque es mucho más legible usar el nombre completo.

Parámetro -Force

Con -Force le indicas a Stop-Process que detenga los procesos especificados sin pedir confirmación, incluso cuando no son propiedad del usuario actual y en situaciones en las que PowerShell normalmente sería más conservador.

Internamente, -Force es también un SwitchParameter sin valor por defecto (None), y sirve básicamente para suprimir los avisos interactivos en procesos que normalmente requerirían confirmación. Es muy útil en scripts automatizados donde no quieres que una ventana de confirmación deje el script colgado esperando entrada del usuario.

Si te interesa saber quién es el propietario de un determinado proceso, puedes recurrir a Get-CimInstance sobre la clase WMI Win32_Process y usar su método GetOwner. De este modo, puedes decidir si forzar o no el cierre según quién lo esté ejecutando.

Parámetro -PassThru

Por defecto, Stop-Process no devuelve nada por pantalla. Es decir, si el cmdlet tiene éxito, simplemente no muestra salida. Si quieres que, además de detener el proceso, se devuelva el objeto de proceso detenido para verlo o seguir trabajándolo en un pipeline, utiliza el parámetro -PassThru.

Este parámetro, también de tipo SwitchParameter, hace que el cmdlet emita un objeto Process representando el proceso que se acaba de detener. Esto es útil si quieres, por ejemplo, ver el uso de memoria, CPU u otras propiedades del proceso justo antes de que deje de existir, o si quieres encadenar otras operaciones con ese objeto.

Parámetro -WhatIf

El parámetro -WhatIf es uno de los grandes aliados cuando trabajas con comandos que pueden ser peligrosos. Al añadirlo, Stop-Process no ejecuta la acción real, sino que muestra un mensaje indicando qué haría si se ejecutara el cmdlet.

De este modo, puedes simular un cierre masivo de procesos sin tocar nada, revisar la lista de objetivos y, cuando estés seguro, quitar -WhatIf y ejecutar el comando real. Para scripts complejos o que se van a ejecutar en producción, es una excelente práctica usarlo durante las pruebas.

Otros parámetros y parámetros comunes

Además de los parámetros propios, Stop-Process admite los CommonParameters de PowerShell, como -Debug, -ErrorAction, -ErrorVariable, -Verbose, -WarningAction, -OutVariable, entre otros. Estos parámetros te permiten controlar cómo se gestionan los errores, qué nivel de detalle se muestra y cómo se propagan los datos en tu script.

Por ejemplo, puedes usar -ErrorAction SilentlyContinue para evitar que se muestren errores cuando intentas detener un proceso que no existe, algo muy práctico cuando quieres que un script siga adelante sin ruido visual.

Ejemplos prácticos con Stop-Process

Una vez vistas la sintaxis y los parámetros, lo más útil es ver ejemplos de uso reales. Aquí tienes varios casos típicos que te ayudarán a dominar el cmdlet en el día a día.

Detener todas las instancias de un proceso por nombre

Si quieres cerrar todas las ventanas del Bloc de notas de golpe, puedes indicar el nombre del proceso con -Name:

Comando rápido: Stop-Process -Name "notepad"

Este comando localiza todas las instancias de notepad que estén corriendo y las detiene en el equipo. Cada ventana del Bloc de notas es un proceso independiente, así que las irás cerrando todas de una tacada sin necesidad de ir una por una.

Si quisieras hacer lo mismo por ID, tendrías que enumerar manualmente todos los PID de cada instancia, lo cual es mucho más engorroso. De ahí que -Name sea muy cómodo cuando te da igual qué instancia concreta se está cerrando, siempre que todas correspondan a la misma aplicación.

Detener una instancia concreta de un proceso con confirmación

Imagina que tienes varias ventanas de un mismo programa y quieres cerrar solo una en particular. Si conoces su PID, puedes usar Stop-Process junto con -Confirm y -PassThru para tener pleno control:

Ejemplo con -Confirm: Stop-Process -Id 3952 -Confirm -PassThru

Con este comando, PowerShell te mostrará un mensaje de confirmación que incluye el nombre del proceso (por ejemplo, «notepad») y su PID (3952). Al aceptar, el cmdlet detendrá esa instancia específica y, gracias a -PassThru, devolverá el objeto de proceso con propiedades como Handles, memoria usada, tiempo de CPU, etc.

Sin el parámetro -PassThru, el comando haría su trabajo pero no verías nada en pantalla, lo cual puede ser desconcertante si esperas algún tipo de confirmación visual sobre qué se ha detenido exactamente.

Detener un proceso mediante objeto y comprobar cuáles han terminado

También puedes trabajar con procesos como objetos, aprovechando la canalización típica de PowerShell. Por ejemplo, para lanzar la calculadora, detenerla y ver qué procesos han salido, podrías hacer algo así:

Flujo de trabajo: calc
$p = Get-Process -Name "calc"
Stop-Process -InputObject $p
Get-Process | Where-Object { $_.HasExited }

En este flujo, primero abres la calculadora, luego usas Get-Process para obtener el proceso «calc» y lo guardas en la variable $p. A continuación, llamas a Stop-Process pasando esa variable a través de -InputObject, lo que detiene esa instancia concreta.

Por último, ejecutas un Get-Process y filtras con Where-Object aquellos procesos cuya propiedad HasExited sea $true. Esta propiedad forma parte de los objetos de tipo Process y te indica qué procesos se han detenido. Si quieres ver todas las propiedades disponibles en estos objetos, puedes usar el clásico Get-Process | Get-Member.

Ver propiedades: Get-Process | Get-Member

Detener procesos que requieren permisos de administrador

Hay procesos del sistema, como lsass, que solo pueden ser detenidos por miembros del grupo de administradores y, aun así, es una acción muy delicada. Si intentas matar uno de estos procesos desde una sesión normal de PowerShell, te encontrarás con un mensaje de acceso denegado.

  Tutorial AirDroid definitivo: conecta, transfiere, controla y duplica pantalla

Comando sensible: Por ejemplo, algo como:

Comando (privilegiado): Get-Process -Name "lsass" | Stop-Process

En una sesión estándar, este comando fallará indicando que no puede detener el proceso por falta de permisos. Si abres PowerShell como administrador y repites el comando, el sistema podría pedirte confirmación antes de proceder, avisando de que se trata de una operación sensible.

Comando (privilegiado — Force): Get-Process -Name "lsass" | Stop-Process -Force

Entonces PowerShell procederá a detener el proceso sin solicitar confirmación. Obviamente, este tipo de acciones no son recomendables salvo que sepas muy bien lo que estás haciendo, porque puedes dejar Windows inestable o provocar un reinicio inesperado.

Integración de Stop-Process con otros cmdlets de PowerShell

PowerShell brilla cuando empiezas a combinar cmdlets. Stop-Process suele ir de la mano de Get-Process, pero también de otros como Where-Object, Select-Object, Out-File y más. Esto te permite crear scripts muy potentes para monitorizar y gestionar procesos automáticamente.

Un caso típico es listar los procesos con Get-Process, aplicar filtros según nombre, usuario o consumo de recursos, y luego canalizar el resultado a Stop-Process para cerrar solo los que te interesen. También puedes generar listados de procesos a ficheros de texto con Out-File o transformarlos en HTML con ConvertTo-HTML para obtener informes más vistosos.

Por ejemplo, podrías usar Get-Process -IncludeUserName para obtener información del usuario propietario de cada proceso y luego aplicar Where-Object para seleccionar solo aquellos que pertenecen a un usuario concreto o que coinciden con un patrón en el nombre.

Es habitual también combinar todo esto con scripts que gestionan logs, como aquellos que escriben en archivos .log con Write-Output cada vez que se mata un proceso concreto, registrando fecha, usuario y motivo. Así tienes un historial de acciones administrativas realizado por PowerShell.

Detener procesos de forma condicional en scripts avanzados

En entornos reales, a veces no quieres sencillamente “matar todo lo que se mueva”, sino aplicar lógica condicional. Un ejemplo muy ilustrativo es el de un script que revisa si existen ciertos procesos (por ejemplo, «acslaunch_win-32» y «java») para un usuario concreto y decide si detener o no java.exe según la presencia del otro proceso.

Este tipo de scripts suelen comenzar obteniendo el usuario actual con herramientas como whoami.exe y manipulando esa cadena para extraer solo el nombre de usuario, sin el dominio. A partir de ahí, se utiliza Get-Process -IncludeUserName para listar procesos junto con el usuario asociado y filtrar aquellos que pertenecen al usuario deseado.

En el ejemplo descrito, se almacenan los resultados de procesos en archivos de texto planos en el escritorio del usuario, se filtran con Select-String para localizar cadenas específicas como «acslaunch_win-32» o «java» y, tras limpiar líneas en blanco con expresiones como $_ .trim() -ne "", se cargan de nuevo en variables.

A partir de ahí, la lógica condicional es sencilla: si se detecta el proceso «acslaunch_win-32» para ese usuario, se asume que no se debe tocar java.exe. Si no está «acslaunch_win-32» pero sí aparece «java», entonces se actúa llamando a:

Cerrar Java si procede: Get-Process -Name java | Stop-Process -Force

En todos los casos, el script registra lo ocurrido en un fichero de log (por ejemplo, en C:\Scripts\matar-java-as400.log), indicando si se ha matado java, si existía acslaunch_win-32 o si no se ha encontrado ningún proceso relevante. Al finalizar, se eliminan los archivos temporales creados en el escritorio.

Este tipo de soluciones ilustran muy bien cómo Stop-Process encaja en flujos de trabajo más complejos, donde no solo importa la orden de matar procesos, sino también quién los ejecuta, qué otros procesos están relacionados y bajo qué condiciones se deben cerrar.

Stop-Process frente a otros métodos para matar procesos en Windows

En Windows hay varias formas de terminar procesos desde la consola. La más veterana en CMD es taskkill, que permite cerrar procesos tanto por PID como por nombre, usando parámetros como /PID, /IM y el clásico /F para forzar.

Tarea (taskkill — PID): Por ejemplo, podrías usar:

taskkill (PID): taskkill /F /PID 4027

Tarea (taskkill — IM): o bien:

taskkill (IM): taskkill /F /IM notepad.exe

Este enfoque es válido y funciona desde Windows XP en adelante, pero PowerShell aporta una forma mucho más rica y orientada a objetos de trabajar. Con Stop-Process, no solo matas procesos, sino que puedes integrarlo con el resto del ecosistema de cmdlets para filtrar, registrar, dar formato a resultados y automatizar tareas complejas.

Filtro avanzado: Por ejemplo, en PowerShell puedes escribir algo como:

Filtro y cierre: Get-Process -Name "notepad" | Where-Object { $_.CPU -gt 10 } | Stop-Process -Force

De esta manera detienes solo las instancias de notepad que cumplan cierta condición (por ejemplo, más de 10 segundos de CPU), algo que con taskkill sería mucho más complicado o directamente imposible sin scripts auxiliares.

Alias y comandos relacionados con Stop-Process

PowerShell suele proporcionar alias para muchas de sus órdenes, de forma que puedas escribir versiones más cortas. Stop-Process no es una excepción: en muchos sistemas podrás usar kill o spps como alias del cmdlet.

Alias (kill): Por ejemplo, en lugar de escribir la forma completa, podrías hacer:

Alias (kill — ejemplo): kill -Name notepad

Alias (spps — ejemplo): o bien:

Alias (spps): spps -Id 3952

Estos alias resultan especialmente cómodos para trabajo interactivo en consola, aunque en scripts suele recomendarse escribir el nombre completo del cmdlet para que el código sea más claro y fácil de entender por cualquiera.

  Cómo actualizar el software en tu Apple TV paso a paso

Lista de cmdlets: Además de Stop-Process, es habitual utilizar en conjunto otros cmdlets relacionados con procesos, como:

  • Get-Process: lista procesos y muestra detalles de cada uno.
  • Start-Process: inicia nuevos procesos o programas.
  • Debug-Process: permite depurar procesos en ejecución utilizando depuradores externos.

Ejecutar con Start-Process: Con Start-Process, por ejemplo, puedes lanzar aplicaciones indicando solo su nombre, como:

Iniciar proceso: Start-Process notepad.exe

Si combinas Start-Process y Stop-Process en scripts, puedes arrancar, supervisar y detener procesos de forma completamente automatizada, ideal para pruebas, mantenimiento o administración de servicios internos.

Gestión básica de procesos con PowerShell: Get-Process y Stop-Process

Para muchos usuarios que están acostumbrados a la interfaz gráfica, entrar en el mundo de PowerShell es todo un salto. Sin embargo, algunos cmdlets como Get-Process y Stop-Process son bastante intuitivos y permiten gestionar procesos sin complicarse demasiado.

Si abres PowerShell (por ejemplo, desde el menú Inicio o con Win + R y escribiendo «powershell»), puedes listar todos los procesos activos simplemente tecleando:

Listar procesos: Get-Process

Salida paginada: Get-Process | more

Filtro por comodín: Get-Process -Name fi*

Si necesitas ver todas las propiedades de un proceso concreto, como «explorer», puedes enviar la salida a Format-List:

Mostrar todas las propiedades: Get-Process -Name explorer | Format-List *

Una vez localizada la información que necesitas, puedes detener procesos con Stop-Process, por ejemplo:

Cerrar por nombre: Stop-Process -Name firefox*

Esto detendrá todos los procesos de Firefox. Si, en lugar del nombre, prefieres usar el ID de proceso, puedes escribir algo como:

Cerrar por ID: Stop-Process -Id 6928

Y, si quieres que el cmdlet te pida confirmación antes de proceder, puedes añadir el parámetro -Confirm:

Cierre con confirmación: Stop-Process -Name Calculator -Confirm

Este enfoque resulta muy cómodo para quienes vienen de la interfaz gráfica y quieren empezar a administrar procesos sin depender del ratón.

Control de errores al matar procesos: suprimir mensajes si el proceso no existe

Un caso muy común es el de intentar matar un proceso que quizá no está en ejecución en ese momento. Con Stop-Process, si intentas detener un proceso inexistente, obtendrás un mensaje de error que, en algunos contextos (por ejemplo, scripts automáticos) puede resultar molesto.

Una manera sencilla de evitar estos errores visibles es comprobar antes si el proceso existe. Por ejemplo, alguien que quería detener Chrome podría escribir algo como:

Intento (Chrome): Stop-Process -Name "chrome"

Si Chrome no está abierto, esto generará un error. Para evitarlo, puedes apoyarte en Get-Process con la opción -ErrorAction (abreviado como -EA) y ejecutar Stop-Process solo si se encuentra el proceso:

Comprobación segura: if ((Get-Process -Name "chrome" -EA 0)) { Stop-Process -Name "chrome" -Force }

En este ejemplo, -EA 0 equivale a -ErrorAction SilentlyContinue, que suprime el mensaje de error si el proceso no existe. El if comprueba si la llamada a Get-Process devuelve algo y, solo en ese caso, se llama a Stop-Process. Así te aseguras de no ver errores innecesarios en pantalla.

Esta técnica se puede reutilizar para cualquier otro proceso que quieras matar de forma silenciosa y sin errores visibles, ideal para scripts que se ejecutan de manera programada.

Stop-Process dentro del ecosistema de comandos de PowerShell

PowerShell no es solo Stop-Process: se trata de un entorno completo de automatización con cientos de cmdlets organizados con el patrón verbo-sustantivo (Get-Process, Restart-Computer, Clear-Content, etc.). Entender este contexto te ayuda a ver a Stop-Process como una pieza más dentro de un puzzle bastante amplio.

Por ejemplo, con Get-Command puedes listar todos los cmdlets disponibles, mientras que con Get-Help puedes ver información detallada de cada uno, incluyendo ejemplos de uso y sintaxis completa. Para trabajar con procesos, además de Stop-Process, son muy útiles Get-Process, Debug-Process o incluso herramientas de monitorización como Get-Counter.

Otros cmdlets como ConvertTo-HTML o ConvertTo-Xml te permiten formatear los resultados de tus comandos en HTML o XML, lo que puede ser muy práctico para generar informes de procesos, servicios o eventos. Y con Out-File puedes guardar directamente la salida de tus consultas en ficheros de texto.

En el terreno de la administración del sistema, también intervienen comandos como Get-Service y Set-Service para manejar servicios, Restart-Computer para reinicios controlados o Get-ComputerInfo para obtener información detallada del sistema. Todo ello se puede combinar en scripts donde Stop-Process aparece como pieza clave cuando toca cerrar aplicaciones o procesos problemáticos.

Al final, el verdadero potencial de Stop-Process se aprecia cuando lo usas junto con estos otros cmdlets, aprovechando la filtración con Where-Object, la selección con Select-Object y la automatización con ForEach-Object, por citar solo algunos ejemplos. De esta forma, pasas de matar procesos de forma aislada a gestionar el sistema de manera integral.

Dominar Stop-Process y sus parámetros, entender cómo se combina con Get-Process, saber cuándo usar -Confirm, -Force, -PassThru o -WhatIf y aprender a integrarlo en scripts que manejan errores y registros con elegancia te coloca en otra liga a la hora de administrar Windows desde PowerShell, dejando muy atrás las limitaciones del CMD clásico o del simple Administrador de tareas.

cómo detener procesos en windows con el comando taskkill-4
Artículo relacionado:
Cómo detener procesos en Windows con el comando taskkill