Uccidere davvero un processo in Windows


375

A volte un programma su un computer Windows diventa pazzo e si blocca. Quindi chiamerò il task manager e premerò il pulsante "Termina processo". Tuttavia, questo non funziona sempre; se lo provo abbastanza volte, alla fine morirà, ma mi piacerebbe davvero poterlo uccidere immediatamente. Su Linux potrei solo kill -9garantire che un processo muoia.

Questo potrebbe anche essere usato per scrivere script batch e scrivere script batch è in programmazione.

Esiste un programma o un comando fornito con Windows che ucciderà sempre un processo? Un'app di terze parti gratuita andrebbe bene, anche se preferirei poterlo fare su macchine su cui mi siedo per la prima volta.


19
I processi randagi sono un problema abbastanza comune nella programmazione che non sono d'accordo; questa non è una domanda fuori tema.
Dan Molding,

19
Mi occupo della gestione dei processi ogni giorno come sviluppatore. Questo è totalmente argomento per me!
John Fitzpatrick,

14
Consiglio vivamente di non eliminare questa domanda. +195 ed è un vero successo di Google per la domanda in questione.
Giosuè,

2
"a meno che non coinvolgano direttamente gli strumenti utilizzati principalmente per la programmazione" Ho riscontrato questo problema per quanto riguarda Visual Studio mantenendo un processo in esecuzione che non mi ha permesso di ucciderlo. La chiusura di Visual Studio ha contribuito a eliminare il processo problematico.
Joakim,

È possibile utilizzare il cmdlet powershell Stop-Process .
Rosberg Linhares,

Risposte:


318

"Termina processo" nella scheda Processi chiama TerminateProcessil modo più avanzato in cui Windows è in grado di interrompere un processo.

Se non scompare, è attualmente bloccato in attesa di alcune risorse del kernel (probabilmente un driver difettoso) e non c'è nulla (a parte un riavvio) che potresti fare per far andare via il processo.

Dai un'occhiata a questo post di blog di ritorno quando: http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-processes.aspx

I sistemi basati su Unix come Linux hanno anche quel problema in cui i processi potrebbero sopravvivere kill -9se si trovano in quello che è noto come "Uninterruptible sleep" (mostrato da top e ps come stato D) a quel punto i processi dormono così bene da non poter elaborare i segnali in arrivo (che è ciò che killfa - inviare segnali).

Normalmente, la sospensione ininterrotta non dovrebbe durare a lungo, ma come in Windows, i driver rotti o i programmi utente danneggiati ( vforksenza exec) possono finire per dormire per Dsempre.


29
Mentre odio che questa è la risposta corretta, non ho dubbi che sia più corretta della taskkill qui sotto ... stupidi guidatori con errori!
codetaku,

6
Leggermente meno fastidioso di un riavvio è disconnettersi / riaccedere. Perdono ancora il lavoro, ma forse non molto tempo.
awidgery,

8
ciò è causato da qualche altro processo assicurandosi che il processo iniziale sia sempre in esecuzione. Hai ucciso la tua vecchia istanza e una nuova è stata avviata dal cane da guardia
pilif l'

8
Questa risposta non è affatto corretta. "Termina processo" non è il modo migliore per uccidere i processi, in quanto non può uccidere i processi di servizio (ad esempio). taskkill /fè il massimo.
user626528

5
TaskKill / f chiama solo l' TerminateProcessAPI. Fa esattamente la stessa cosa del Task Manager (però, hai ragione, con privilegi elevati).
pilif

233
taskkill /im myprocess.exe /f

"/ F" sta per "force". Se conosci il PID, puoi specificarlo, come in:

taskkill /pid 1234 /f

Molte altre opzioni sono possibili, basta digitare taskkill /? per tutti loro. L'opzione "/ t" uccide un processo e tutti i processi figlio; che potrebbe esserti utile.


10
Solo una nota. Ciò è particolarmente utile se si stanno scrivendo script per la gestione del server. kill.exe (dal kit di risoluzione NT) provocherà la chiusura di un programma, ma se è installato un gestore di arresti anomali (in particolare windbg), può causare problemi poiché il sistema operativo vedrà il processo interrotto come arrestato in modo anomalo e tenterà di eseguire il debug esso. Taskkill non provocherà questo problema.
Aaron,

6
@lzprgmr - taskkill e "operazione finale" probabilmente entrambi chiamano le stesse finestre sottostanti funzione "TerminateProcess" msdn.microsoft.com/en-us/library/windows/desktop/...
JosephStyons

60
Questo non è più efficace del "processo finale" da Task Manager.
Eddie,

2
Ho cercato di uccidere forzatamente SugarSync.exe senza dover riavviare (dal momento che riavviare SugarSync due volte prima che funzioni davvero lo fa funzionare di nuovo), ma taskkill / T / F / IM SugarSync.exe non funziona, anche se afferma "SUCCESSO"
Jon Coombs

2
GRAZIE! taskkill /pid 1234 /ffunziona quando End Task si rifiuta di funzionare! WOW!
Hendy Irawan,

37

Process Hacker ha molti modi per uccidere un processo.

(Fare clic con il tasto destro del mouse sul processo, quindi andare su Varie-> Terminator.)


5
Non riesco a trovare molto in termini di conferma, poiché la ricerca di questo produce solo milioni di DOWNLOAD GRATUITO !!! collegamenti. Ma fa quello che dice di fare, i rischi del virus e tutto il resto.
Bwerks,

2
@Nuzzolilo: Sicuro! Fare clic con il tasto destro del mouse sul processo, andare su Varie-> Terminator.
user541686,

6
Non funziona su tutti i processi, ne ho avuto uno che è sopravvissuto a tutte le opzioni.
Zitrax,

7
Ha visualizzato in blu il mio computer. Il processo è andato via dopo il riavvio. Ottimo lavoro ... -.- '
Pedro Oliveira

5
Purtroppo Terminator è stato rimosso in v2.39 :(
raymai97,

23

JosepStyons ha ragione. Apri cmd.exe ed esegui

taskkill /im processname.exe /f

Se c'è un errore che dice,

ERRORE: impossibile terminare il processo "process.exe" con PID 1234. Motivo: accesso negato.

quindi provare a eseguire cmd.exe come amministratore.


9
In esecuzione come amministratore, l'errore cambia. Ora dice: ERROR: The process with PID 17888 (child process of PID 17880) could not be terminated. Reason: There is no instance of the task.e si riferisce al genitore PID 17880. Poiché non riesce a trovare il genitore, non ucciderà il bambino orfano. :(
Jesse Chisholm,

1
"È necessario uccidere anche il processo figlio se ne è stato generato uno per uccidere correttamente il processo" provare questo stackoverflow.com/questions/12528963/…
Dhruv Chandhok l'

Nel mio caso, il processo con gli zombi che gli avevo detto di uccidere era l' unico figlio e non c'erano genitori, sebbene lo zombi pensasse ancora di avere un genitore. Nel mio caso, risolto utilizzando il percorso del sistema di ripristino avanzato delle impostazioni di Windows 8.1, ma annullando la cancellazione effettiva di qualsiasi disco e facendo solo un riavvio forzato completo. L'arresto e il riavvio regolari sono in realtà sospensione / ibernazione (per risparmiare tempo all'avvio). Non banale farlo spegnere completamente .
Jesse Chisholm,

"Accesso negato" significa che il processo è già in fase di chiusura. Ad esempio se avessi appena tentato di chiuderlo prima. Dovrai aspettare fino a quando non verrà chiuso.
Pacerier,

risultati di taskkill con diritti di amministratore: accesso negato.
amuliar


15

Un trucco che funziona bene è collegare un debugger e quindi uscire dal debugger.

Su XP o Windows 2003 puoi farlo usando ntsd che è pronto all'uso:

ntsd -pn myapp.exe

ntsd aprirà una nuova finestra. Basta digitare 'q' nella finestra per uscire dal debugger ed eliminare il processo.

Ho saputo che funziona anche quando il task manager non sembra in grado di interrompere un processo.

Sfortunatamente ntsd è stato rimosso da Vista e devi installare gli strumenti di debug (gratuiti) per Windows per ottenere un debugger adatto.


1
Grazie mille per questo. Aggiungi "-c q" (senza virgolette) ad autoquit, il che lo rende un killer di processo ideale.
Joanis,

2
Quando Visual Studio e un'applicazione in fase di debug si bloccano, collegare e terminare la vecchia istanza di VS. Il killer può essere una nuova istanza di VS, che può quindi aprire il vecchio progetto e consentire di continuare a lavorare.
Bruno Martinez,

Non riesco a capire come scaricare qualcosa da quel link diverso da winsdk_web.exe, che non fa nulla.
endolito il

Ora puoi ottenerlo nell'SDK di Windows 10 eseguendo il programma di installazione e deselezionando tutto tranne "Strumenti di debug per Windows" ( docs.microsoft.com/en-us/windows-hardware/drivers/debugger/… )
Coburn,

6

imposta un comando AT per eseguire task manager o process explorer come SYSTEM.

AT 12:34 /interactive "C:/procexp.exe"

Se Process Explorer fosse nell'unità C principale, questo si aprirà come SISTEMA e potresti interrompere qualsiasi processo senza ottenere errori di accesso negato. Impostalo per un minuto in futuro, quindi verrà visualizzato per te.


4
Ricevo il seguente avviso quando provo questo, quindi sembra non funzionare più: "Avvertenza: a causa dei miglioramenti della sicurezza, questa attività verrà eseguita al momento previsto ma non in modo interattivo. Utilizzare l'utilità schtasks.exe se è richiesta un'attività interattiva ('schtasks /?' per dettagli)."
WhiteKnight

0

Quando viene negato l'accesso a ntsd, provare:

ZeroWave è stato progettato per essere uno strumento semplice che fornirà una chiusura multilivello di qualsiasi tipo di processo.

ZeroWave è anche un programma facile da usare grazie alla sua semplice installazione e alla sua interfaccia grafica molto amichevole.

ZeroWave ha tre modalità di terminazione e con la modalità "INSANE" può terminare qualsiasi tipo di processo che può essere eseguito su Windows.

Sembra che ZeroWave non possa uccidere avp.exe


0

Cordiali saluti, a volte è possibile utilizzare SYSTEM o Trustedinstaller per terminare le attività;)

google quickkill_3_0.bat

sc config TrustedInstaller binPath= "cmd /c TASKKILL /F  /IM notepad.exe
sc start "TrustedInstaller"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.