derwowusste
Goto Top

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?

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

mirdochegal
mirdochegal 08.04.2025 aktualisiert um 14:07:31 Uhr
Goto Top
Moin,

kannst es nicht via Name abfangen (nicht via PID)?

1
taskkill /IM "prozess_name" /T /F  
/T = killt alle Childprozesse
/F = Forcefully

oder:
1
wmic process where "name='meinprozessname.exe'" delete  

Gruß
DerWoWusste
DerWoWusste 08.04.2025 aktualisiert um 14:26:44 Uhr
Goto Top
taskkill /IM "prozess_name" /T /F
So wird es schon bereits gemacht. Dennoch steht in der Fehlermeldung die PID.
Wie auch immer: taskkill kann es nicht zuverlässig genug. Ich werde wmic einfach versuchen und schauen, ob es besser läuft. Auch tskill probiere ich. Kann etwas dauern, das hängt sich so etwa einmal täglich auf.
DerWoWusste
DerWoWusste 08.04.2025 um 15:11:19 Uhr
Goto Top
pskill kann auch helfen, siehe lange Diskussion auf https://stackoverflow.com/questions/12528963/taskkill-f-doesnt-kill-a-pr ...
Crusher79
Crusher79 08.04.2025 um 15:28:35 Uhr
Goto Top
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.

-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
$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 {}
}
Crusher79
Crusher79 08.04.2025 aktualisiert um 15:42:03 Uhr
Goto Top
Zitat von @DerWoWusste:

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 face-big-smile

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
$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.
emeriks
emeriks 08.04.2025 aktualisiert um 15:44:34 Uhr
Goto Top
Ich kann das bestätigen, habe gleiches bei uns auch beobachtet. Es scheint sich auf "exzessive" Prozesse zu beschränken.

  • 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.
DerWoWusste
Lösung DerWoWusste 14.04.2025 um 15:03:16 Uhr
Goto Top
tskill hat bereits geholfen, seit dem kein Problem mehr.