Stop-Process în PowerShell

Procese și servicii Windows PowerShell 1.0

Oprește unul sau mai multe procese locale, după nume, după ID sau primite prin pipeline de la Get-Process.

Sintaxă
Stop-Process [-Id] <Int32[]> [-Force] [-PassThru] [-WhatIf] [-Confirm]
Stop-Process -Name <String[]> [-Force] [-PassThru] [-WhatIf] [-Confirm]

Ce face Stop-Process

Stop-Process oprește procese de pe computerul local. Primul parametru pozițional este -Id (Stop-Process 4812); pentru nume trebuie să scrii explicit -Name, iar comanda oprește toate procesele cu acel nume. Poți primi procesele și prin pipeline, de la Get-Process, după ce le-ai filtrat cu Where-Object.

Cmdlet-ul folosește metoda Process.Kill(): procesul este închis forțat, fără să i se ceară să salveze ceva, deci datele nesalvate se pierd. Comanda este asincronă: se întoarce imediat, iar procesul poate dispărea puțin mai târziu; dacă trebuie să aștepți, folosește Wait-Process sau proprietatea HasExited. Fără -PassThru nu afișează nimic.

Pe Windows, pentru a opri procesul altui utilizator ai nevoie de o sesiune pornită cu „Run as administrator”, iar comanda cere confirmare pentru procesele care nu îți aparțin, dacă nu adaugi -Force. Oprirea unui proces poate opri și serviciile care depind de el. Aliasuri: spps pe toate sistemele, kill doar pe Windows.

Parametri

Parametru Descriere
-Id ID-urile proceselor de oprit, separate prin virgulă. Este parametrul pozițional implicit.
-Name Numele proceselor de oprit; acceptă wildcard-uri și oprește toate instanțele.
-InputObject Obiecte Process din variabilă sau din pipeline.
-Force Oprește fără confirmare și procesele care nu aparțin utilizatorului curent.
-PassThru Întoarce obiectul procesului oprit (implicit comanda nu afișează nimic).
-WhatIf Arată ce procese ar fi oprite, fără să le oprească.
-Confirm Cere confirmare înainte de fiecare proces.

Ce returnează

Nimic, implicit; cu -PassThru, câte un obiect Process pentru fiecare proces oprit.

Exemple

Exemplul 1: Închiderea tuturor ferestrelor Notepad

Toate procesele cu numele notepad sunt oprite; comanda nu afișează nimic.

Stop-Process -Name notepad

Exemplul 2: Verificare cu -WhatIf înainte de oprire

Vezi exact ce procese ar fi oprite (nume și PID), fără să se întâmple nimic.

Get-Process -Name EXCEL | Stop-Process -WhatIf

Ieșire în terminal

What if: Performing the operation "Stop-Process" on target "EXCEL (5320)".
What if: Performing the operation "Stop-Process" on target "EXCEL (9876)".

Exemplul 3: Oprirea proceselor node pornite de peste 8 ore

Filtrăm după StartTime, oprim fără confirmare și afișăm ce s-a oprit cu -PassThru.

Get-Process -Name node |
    Where-Object StartTime -LT (Get-Date).AddHours(-8) |
    Stop-Process -Force -PassThru |
    Select-Object Name, Id

Ieșire în terminal

Name   Id
----   --
node 7716

Greșeli frecvente

  • Rulezi Stop-Process -Name pwsh și închizi chiar fereastra în care lucrezi: exclude sesiunea curentă cu Where-Object Id -ne $PID.
  • Scrii Stop-Process notepad fără -Name: parametrul pozițional este -Id, așa că primești o eroare de conversie a textului în număr.
  • Verifici imediat după comandă dacă procesul a dispărut: oprirea este asincronă; folosește Wait-Process -Id 4812 înainte de pasul următor.
  • Pe Linux sau macOS scrii kill crezând că este aliasul PowerShell: acolo kill este comanda nativă, care primește PID-uri și semnale, nu parametri ca -Name.

Comenzi înrudite

  • Get-Process: Afișează procesele care rulează pe computerul local, cu memoria folosită, timpul de procesor și ID-ul (PID) fiecăruia.
  • Start-Process: Pornește un program sau deschide un fișier cu aplicația asociată, opțional ca administrator, într-o fereastră nouă sau așteptând să se termine.
  • Where-Object: Filtrează obiectele din pipeline și le lasă să treacă doar pe cele care îndeplinesc o condiție.