Taskkill beendet Prozess nicht, Taskmanager schafft es
Moin Kollegen.
Ich habe hier ein Skript, das Tag und Nacht läuft, bei dem leider einzelne Prozesse alle paar Tage hängenbleiben und ich möchte diese automatisiert gewaltsam beenden.
Taskkill.exe schafft es in der Regel, manchmal jedoch scheitert Taskkill mit dem schwachsinnigen Fehler, dass die ProzessID (z.B.) 5424 nicht geschlossen werden kann, da der Prozess nicht existiert (!?).
Da hilft dann nur ein manueller Eingriff - der Taskmanager (gestartet als selber Nutzer, nicht elevated) schafft es merkwürdigerweise immer, den Prozess zu beenden!
Frage: wenn schon Taskkill das nicht schafft, welcher andere Befehl kommt dem, was der Taskmanager tut bei "Task beenden" gleich?
Ich habe hier ein Skript, das Tag und Nacht läuft, bei dem leider einzelne Prozesse alle paar Tage hängenbleiben und ich möchte diese automatisiert gewaltsam beenden.
Taskkill.exe schafft es in der Regel, manchmal jedoch scheitert Taskkill mit dem schwachsinnigen Fehler, dass die ProzessID (z.B.) 5424 nicht geschlossen werden kann, da der Prozess nicht existiert (!?).
Da hilft dann nur ein manueller Eingriff - der Taskmanager (gestartet als selber Nutzer, nicht elevated) schafft es merkwürdigerweise immer, den Prozess zu beenden!
Frage: wenn schon Taskkill das nicht schafft, welcher andere Befehl kommt dem, was der Taskmanager tut bei "Task beenden" gleich?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 672391
Url: https://administrator.de/forum/taskkill-beendet-prozess-nicht-taskmanager-schafft-es-672391.html
Ausgedruckt am: 17.04.2025 um 18:04 Uhr
7 Kommentare
Neuester Kommentar
Normal ist der taskkill ja sehr robust.
Hier mal Variante mit PowerShell.
Differenziert geht es nur auf eine Portable Firefox Version los. Holt sich alle PID und versucht zu stoppen. Je nach Taskstruktur verschwinden ja Child-Prozesse teils nach dem Kill des Hauptprozesses automatisch.
Das führt zu "PID" nicht (MEHR) gefunden.
Wenn das Tool oder was auch immer eigenständig wieder neuen Prozess startet, so könnte nur so ein Script mehrfach aufrufen - Schleife. Bis nach Zeit-X keine Prozesse mehr mit dem Namen und aus dem Ordner auftauchen.
Ordnername ist optional. Hab es nur so gebaut, da der Firefox portable Ordner immer an der Stelle ist. Andere Firefox Instanzen bleiben davon unberührt.
Ja, so eine fehlende PID taucht natürlich auch hier auf! ABER durch den Parameter macht das Script einfach weiter und haut alles im Array weg.
Ginge evtl. noch schöner, aber bei mir hat es seinen Zweck erfüllt: Update der portablen durch kompletten Austausch via ZIP. Sonst wäre umbenennen des entpackten Ordners nicht möglich.
try ... catch... final ...
Final fehlt. Du könntest auch Error abfangen, mit Start-Sleep -minutes 5 fünf MInunten warten und Final nochmal Kill probieren - wenn nötig.
Ist mit PS recht flexibel.
Hier mal Variante mit PowerShell.
Differenziert geht es nur auf eine Portable Firefox Version los. Holt sich alle PID und versucht zu stoppen. Je nach Taskstruktur verschwinden ja Child-Prozesse teils nach dem Kill des Hauptprozesses automatisch.
Das führt zu "PID" nicht (MEHR) gefunden.
Wenn das Tool oder was auch immer eigenständig wieder neuen Prozess startet, so könnte nur so ein Script mehrfach aufrufen - Schleife. Bis nach Zeit-X keine Prozesse mehr mit dem Namen und aus dem Ordner auftauchen.
Ordnername ist optional. Hab es nur so gebaut, da der Firefox portable Ordner immer an der Stelle ist. Andere Firefox Instanzen bleiben davon unberührt.
-ErrorAction SilentlyContinue
Ja, so eine fehlende PID taucht natürlich auch hier auf! ABER durch den Parameter macht das Script einfach weiter und haut alles im Array weg.
Ginge evtl. noch schöner, aber bei mir hat es seinen Zweck erfüllt: Update der portablen durch kompletten Austausch via ZIP. Sonst wäre umbenennen des entpackten Ordners nicht möglich.
try ... catch... final ...
Final fehlt. Du könntest auch Error abfangen, mit Start-Sleep -minutes 5 fünf MInunten warten und Final nochmal Kill probieren - wenn nötig.
Ist mit PS recht flexibel.
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
$ProcName = "Firefox"
$ProcPath = "FirefoxPortableESR"
try {$KillProcFirefoxFSP = Get-Process -Name $ProcName -ErrorAction SilentlyContinue | Where-Object { $_.Path -match $ProcPath } | Select Id,Path,ProcessName} catch {}
if ($KillProcFirefoxFSP.Count -ne 0) {
try { $KillProcFirefoxFSP.Id | ForEach-Object { Stop-Process -Id $_ -Force -ErrorAction SilentlyContinue } } catch {}
}
Zitat von @DerWoWusste:
pskill kann auch helfen, siehe lange Diskussion auf https://stackoverflow.com/questions/12528963/taskkill-f-doesnt-kill-a-pr ...
pskill kann auch helfen, siehe lange Diskussion auf https://stackoverflow.com/questions/12528963/taskkill-f-doesnt-kill-a-pr ...
Ach richtig. Mark Russinovich ganz vergessen. Ja dürfte auch gehen
Einziger Nachteil bei PowerShell wie sag ich es meinem Kinde? $LASTEXITCODE = 0 für erfolgreichen "DOS Befehl". Ginge auch.
Man muss teils Parameter wieder verpacken, damit PS damit klar kommt.
Aber du hast recht. Klappt auch für das PING Kommando. TCP Test unter PS geht auch. Aber ich nehme auch gern
1
2
2
$null = cmd /c "ping $_ -n 2"
if ($LASTEXITCODE -eq "0") { ... }
Aber ja pskill dürfte via CMD oder PowerShell auch ganz gut gehen somit. Prüfe statische Drucker IPs 50-52 damit. IN der einer Range über 200 Drucker parallel.
pskill, ping und wie sich nicht alle heißen funktionieren natürlich auch ganz gut. Sehr, sehr robust.
Ich kann das bestätigen, habe gleiches bei uns auch beobachtet. Es scheint sich auf "exzessive" Prozesse zu beschränken.
Wir haben hier eine 32bit-Anwendung, welche manchmal die 2GB-RAM-Grenze voll ausschöpft. Infolgedessen geht die CPU-Last gg. 100%.
Wenn es selbst unter der Anmeldung des betreffendne Benutzers nicht geht hilft oft die Zwangsabmeldung mit
Beobachtet unter Win2019.
E.
- Taskkill meldet Fehler mit der angeblich nicht existierenden PID.
- Taskmanager "als Administrator" meldet "Zugriff verweigert", wenn nicht der ausführende Benutzer des betreffenden Prozess
- Taskmanager als ausführenden Benutzer des Prozess erfolgreich, sofern die Benutzersitzung überhaupt noch reagiert.
Wir haben hier eine 32bit-Anwendung, welche manchmal die 2GB-RAM-Grenze voll ausschöpft. Infolgedessen geht die CPU-Last gg. 100%.
Wenn es selbst unter der Anmeldung des betreffendne Benutzers nicht geht hilft oft die Zwangsabmeldung mit
shutdown -l -f
Beobachtet unter Win2019.
E.