Naprawdę zabija proces w systemie Windows

375

Czasami program na komputerze z systemem Windows wariuje i po prostu się zawiesza. Zadzwonię więc do menedżera zadań i kliknę przycisk „Zakończ proces”. Jednak to nie zawsze działa; jeśli spróbuję tego wystarczająco dużo razy, zazwyczaj ostatecznie umrze, ale naprawdę chciałbym móc go natychmiast zabić. W systemie Linux mógłbym tylko kill -9zagwarantować, że proces umrze.

Można to również wykorzystać do pisania skryptów wsadowych i pisania skryptów wsadowych do programowania.

Czy jest jakiś program lub polecenie dostarczane z systemem Windows, które zawsze zabije proces? Bezpłatna aplikacja innej firmy byłaby w porządku, chociaż wolałbym móc to zrobić na maszynach, na których siadam po raz pierwszy.

Eli Courtwright
źródło
19
Zabłąkane procesy to dość powszechny problem w programowaniu, z którym muszę się nie zgodzić; to nie jest pytanie nie na temat.
Dan Molding,
19
Codziennie jako deweloper zajmuję się zarządzaniem procesami. To jest dla mnie całkowicie ON!
John Fitzpatrick
14
Zdecydowanie odradzam usunięcie tego pytania. +195 i to naprawdę wczesne trafienie w Google dla tego pytania.
Joshua
2
„chyba że dotyczą one bezpośrednio narzędzi używanych głównie do programowania”. Natknąłem się na ten problem związany z uruchomieniem procesu przez Visual Studio, który uniemożliwił mi zabicie go. Zamknięcie programu Visual Studio pomogło zabić problematyczny proces.
Joakim
Możesz użyć polecenia cmdlet PowerShell Stop-Process .
Rosberg Linhares,

Odpowiedzi:

318

„Zakończ proces” w wywołaniach Processes-Tab, TerminateProcessktóry jest najbardziej zaawansowanym sposobem, w jaki system Windows wie, jak zabić proces.

Jeśli nie zniknie, jest obecnie zablokowany, czekając na jakiś zasób jądra (prawdopodobnie błędny sterownik) i nie ma nic (poza ponownym uruchomieniem), co można zrobić, aby proces zniknął.

Spójrz na ten wpis blogu z drogi powrotnej, gdy: http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-processes.aspx

Systemy oparte na Uniksie, takie jak Linux, również mają ten problem, w którym procesy mogą przetrwać, kill -9jeśli są w tak zwanym „nieprzerwanym śnie” (pokazane jako top i ps jako stan D), w którym to momencie procesy śpią tak dobrze, że nie mogą przetworzyć przychodzących sygnałów (co killrobi - wysyłanie sygnałów).

Zwykle nieprzerwany sen nie powinien trwać długo, ale tak jak w systemie Windows, uszkodzone sterowniki lub uszkodzone programy przestrzeni użytkownika ( vforkbez exec) mogą spać Dwiecznie.

pilif
źródło
29
Chociaż nienawidzę, że jest to poprawna odpowiedź, nie mam wątpliwości, że jest bardziej poprawna niż zadanie poniżej ... głupi kierowcy!
codetaku
6
Nieco mniej irytujące niż ponowne uruchomienie jest wylogowanie / ponowne zalogowanie. Wciąż tracę pracę, ale może nie tak dużo czasu.
awidgery
8
jest to spowodowane przez inny proces, który upewnia się, że proces początkowy jest zawsze uruchomiony. Zabiłeś swoją starą instancję, a strażnik
uruchomił nową
8
Ta odpowiedź w ogóle nie jest poprawna. „Zakończ proces” nie jest najbardziej ostatecznym sposobem na zabicie procesów, ponieważ nie może zabić procesów usług (na przykład). taskkill /fjest najbardziej ostateczny.
user626528
5
TaskKill / f wywołuje tylko TerminateProcessAPI. Robi dokładnie to samo, co Menedżer zadań (jednak masz rację, z podwyższonymi uprawnieniami).
pilif
233
taskkill /im myprocess.exe /f

„/ F” oznacza „siłę”. Jeśli znasz PID, możesz to określić, jak w:

taskkill /pid 1234 /f

Możliwych jest wiele innych opcji, wystarczy wpisać taskkill /? dla nich wszystkich. Opcja „/ t” zabija proces i wszelkie procesy potomne; które mogą ci się przydać.

JosephStyons
źródło
10
Tylko uwaga. Jest to szczególnie przydatne, jeśli piszesz skrypty do zarządzania serwerem. kill.exe (z zestawu NT Res) spowoduje zamknięcie programu, ale jeśli masz zainstalowany program do obsługi awarii (szczególnie windbg), może powodować problemy, ponieważ system operacyjny zobaczy, że zabity proces się zawiesił, i podejmie próbę debugowania to. Taskkill nie spowoduje tego problemu.
Aaron
6
@lzprgmr - taskkill i „end task” prawdopodobnie wywołują tę samą podstawową funkcję systemu Windows „TerminateProcess” msdn.microsoft.com/en-us/library/windows/desktop/…
JosephStyons
60
Nie jest to bardziej skuteczne niż „zakończenie procesu” z menedżera zadań.
Eddie
2
Próbowałem wymusić zabicie SugarSync.exe bez konieczności ponownego uruchamiania (ponieważ ponowne uruchomienie SugarSync dwa razy, zanim naprawdę zacznie działać, powoduje, że znów działa), ale taskkill / T / F / IM SugarSync.exe nie działa - nawet jeśli twierdzi, że „SUKCES”
Jon Coombs
2
DZIĘKUJĘ CI! taskkill /pid 1234 /fdziała, gdy End Task odmawia działania! ŁAŁ!
Hendy Irawan
37

Process Hacker ma wiele sposobów na zabicie procesu.

(Kliknij proces prawym przyciskiem myszy, a następnie przejdź do Różne-> Terminator.)

użytkownik541686
źródło
5
Nie mogę znaleźć wiele na drodze do potwierdzenia, ponieważ poszukiwanie tego daje miliony DARMOWYCH POBIERANIA !!! spinki do mankietów. Ale robi to, co mówi, robi, ryzykuje wirusami i tym podobne.
bwerks
2
@Nuzzolilo: Jasne! Kliknij proces prawym przyciskiem myszy, przejdź do Różne-> Terminator.
user541686,
6
Nie działa na wszystkie procesy, miałem taki, który przetrwał wszystkie opcje.
Zitrax
7
Bluescreened mój komputer. Proces zakończył się po ponownym uruchomieniu. Dobra robota ... -.- '
Pedro Oliveira
5
Niestety Terminator został usunięty w wersji 2.39 :(
raymai97
23

JosepStyons ma rację. Otwórz cmd.exe i uruchom

taskkill /im processname.exe /f

Jeśli wystąpi błąd,

BŁĄD: Nie można zakończyć procesu „process.exe” z PID 1234. Powód: odmowa dostępu.

następnie spróbuj uruchomić cmd.exe jako administrator.

Dhruv Chandhok
źródło
9
Błąd działa jako administrator. Teraz mówi: ERROR: The process with PID 17888 (child process of PID 17880) could not be terminated. Reason: There is no instance of the task.i odnosi się do rodzica PID 17880. Ponieważ nie może znaleźć rodzica, nie zabije osieroconego dziecka. :(
Jesse Chisholm
1
„musisz zabić proces potomny, jeśli którykolwiek spawn się zabije, aby skutecznie zabić proces” wypróbuj ten stackoverflow.com/questions/12528963/…
Dhruv Chandhok
W moim przypadku proces zombie, który kazałem mu zabić, był jedynym dzieckiem i nie było rodzica, chociaż zombie nadal myślało, że ma rodzica. W moim przypadku problem został rozwiązany za pomocą ścieżki zaawansowanego systemu naprawy ustawień systemu Windows 8.1, ale anulowanie faktycznego wyczyszczenia dowolnego dysku i wykonanie pełnego wymuszonego ponownego uruchomienia. Regularne wyłączanie i ponowne uruchamianie to naprawdę tryb uśpienia / hibernacji (aby zaoszczędzić czas podczas uruchamiania). Nie trywialne zmusienie go do pełnego zamknięcia.
Jesse Chisholm,
„Odmowa dostępu” oznacza, że ​​proces jest już w trakcie zamykania. Na przykład, jeśli próbowałeś go wcześniej zamknąć. Musisz poczekać, aż się zamknie.
Pacerier
wyniki zadań zadania w ramach uprawnień administratora: Odmowa dostępu.
amuliar
22

Pobierz eksplorator procesów z sysinternals (teraz Microsoft)

Process Explorer - Windows Sysinternals | Dokumenty Microsoft

Iain Holder
źródło
15
Zapewnia to więcej informacji (i pewną ograniczoną możliwość wyszukiwania zamków), ale nie osiągnąłem więcej sukcesów w zabijaniu zadań za pomocą tego niż w przypadku podstawowego Menedżera zadań. Niektóre procesy (takie jak antywirus i SugarSync.exe) po prostu odmawiają śmierci.
Jon Coombs
15

Jedną sztuczką, która działa dobrze, jest dołączenie debuggera, a następnie zamknięcie debugera.

W systemie Windows XP lub Windows 2003 możesz to zrobić za pomocą ntsd, który jest dostarczany po wyjęciu z pudełka:

ntsd -pn myapp.exe

ntsd otworzy nowe okno. Wystarczy wpisać „q” w oknie, aby wyjść z debuggera i wyjąć proces.

Wiem, że to działa, nawet jeśli menedżer zadań nie wydaje się być w stanie zabić procesu.

Niestety ntsd został usunięty z Visty i musisz zainstalować (bezpłatne) narzędzia do debugowania dla systemu Windows, aby uzyskać odpowiedni debugger.

Rob Walker
źródło
1
Dziękuję TAK DUŻO za to. Dodaj „-c q” (bez cudzysłowów) do autoquit, co czyni go idealnym zabójcą procesu.
Joanis,
2
Gdy program Visual Studio i debugowana aplikacja są zawieszane, dołącz i zabij starą instancję VS. Zabójcą może być nowa instancja VS, która może następnie otworzyć stary projekt i pozwolić ci kontynuować pracę.
Bruno Martinez,
Nie mogę wymyślić, jak pobrać cokolwiek z tego linku poza tym winsdk_web.exe, co nic nie robi.
endolith,
Możesz go teraz pobrać w zestawie Windows 10 SDK, uruchamiając instalator, a następnie odznaczając wszystko oprócz „Narzędzia debugowania dla systemu Windows” ( docs.microsoft.com/en-us/windows-hardware/drivers/debugger/… )
Coburn
6

skonfiguruj polecenie AT, aby uruchomić menedżera zadań lub eksploratora procesów jako SYSTEM.

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

Jeśli eksplorator procesów znajdował się na twoim głównym dysku C, otworzyłby go jako SYSTEM i możesz zabić dowolny proces bez uzyskania błędów odmowy dostępu. Ustaw to na około minutę w przyszłości, a następnie pojawi się dla Ciebie.

David Ruark
źródło
4
Podczas próby wykonania tego pojawia się następujące ostrzeżenie, więc wydaje się, że nie działa: „Ostrzeżenie: Ze względu na ulepszenia zabezpieczeń to zadanie zostanie uruchomione w oczekiwanym czasie, ale nie interaktywnie. Użyj narzędzia schtasks.exe, jeśli wymagane jest zadanie interaktywne ('schtasks /?' dla szczegółów)."
WhiteKnight
0

W przypadku odmowy dostępu ntsd spróbuj:

ZeroWave został zaprojektowany jako proste narzędzie, które zapewni wielopoziomowe zakończenie każdego rodzaju procesu.

ZeroWave jest także łatwym w użyciu programem ze względu na prostą instalację i bardzo przyjazny interfejs graficzny.

ZeroWave ma trzy tryby zakończenia, a tryb „INSANE” może zakończyć każdy proces, który można uruchomić w systemie Windows.

Wygląda na to, że ZeroWave nie może zabić avp.exe

diyizm
źródło
0

Do Twojej wiadomości możesz czasem użyć SYSTEM lub Trustedinstaller do zabicia zadań;)

google quickkill_3_0.bat

sc config TrustedInstaller binPath= "cmd /c TASKKILL /F  /IM notepad.exe
sc start "TrustedInstaller"
RmccurdyDOTcom
źródło