Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

XP: Wie Programm mit hoher CPU-Last killen und neu starten

habreli / 9 Antworten / Flachansicht Nickles

Ich habe das Problem, dass sich eine Visualisierungssoftware zeitweise aufhängt - sprich sie produziert 100% Last auf dem Rechner und bewegt sich nicht mehr. Ein Killen und Neustarten der Software "löst" das Problem.

Nun suche ich ein scriptfähiges Tool, mit welchem ich die CPU-Last eines Prozesses/Programmes abfragen kann.
Wenn also die CPU-Last bei diesem Programm auf über 80% steigt, möchte ich das einfach mittels Script killen und neu starten.

Bitte keine Diskussionen, weshalb das Programm hängt - der Hersteller arbeitet daran - nur so lange will ich nicht warten.

Vorstellen könnte ich mir auch ein Watchdog - Programm bzw. auch eine Realisierung mittels Powershell wäre möglich - nur hier fehlt mir die Idee, wie das gehen könnte.

bei Antwort benachrichtigen
Data Junkey habreli „Hmm... ...mit Taskkill kann ich nicht wirklich die CPU-Last eines Programms...“
Optionen

Klar, du musst natürlich schon den Namen oder die Prozess-Kennung beim Taskkill mit angeben, sonst geht da nix.

Da musst du schon ein bisschen "nachforschen" wie das bei dir geht.

Mit Taskkill /? bekommst du die Hilfe

Mit start kannst du ein Programm starten.
Mit start /? bekommst du Hilfe.

Taskkill überwacht nicht deine Prozesse. und Run auch nicht. Du musst dieses Script schon "von Hand" ausführen. Aber das ist mit einem Klick erledigt, und bequemer als ewig mit der Maus rumzuklicken. ..

So, gut dass ich nachgesehen habe. ..

Ich habe nämlich gerade gesehen, dass es zum Taskkill noch eine Alternative gibt: Und zwar tskill.

Ich habe mit zum Starten und Beenden meiner VmWare-Workstation 2-Scripte geschrieben, weil die VmWare eine Menge Ressourcen frisst. Dazu habe ich 2 verschiedene Ansätze erstellt, welche beide Funktionieren.

Du musst dich natürlich schon selber etwas mit diesen Konsolen-Befehlen auseinandersetzen, damit was für dich brauchbares herauskommt.

Ich klebe dir jetzt einfach mal meine Scripte hier rein. Die kannst du natürlich nicht so verwenden, aber sie können dir evtl. dabei helfen, einen Ansatz für dein Skript zu finden.

Anmerkung:
Wenn du in einem Script einen Prozess (oder Programm) beenden und neu starten willst, solltest du mit "start" und der Option "wait" arbeiten. Damit wird verhindert, dass die Anwendung einen Start-Befehl bekommt, ohne vorher richtig beendet worden zu sein.
Mit "start" kannst du auch die Priorität festlegen. ...Das ist es doch, was du u.a. wolltest. .. :-)
-----------------------------------------
Variante 1
-----------------------------------------
@Echo off
cls
cd \
c:
cd \
cd WINDOWS\SYSTEM32
sc stop "VMware NAT Service"
sc stop VMnetDHCP
sc stop vmount2
sc stop VMAuthdService
sc stop MSDTC
tskill vmware-tray /A
------------------------------------------
Variante 2 (etwas ausgereifter)
------------------------------------------
@Echo off
cls
cd \
c:
cd \
cd WINDOWS\SYSTEM32

FOR %%I IN ("VMware NAT Service" VMnetDHCP vmount2 VMAuthdService) DO SC STOP %%I /WAIT
FOR %%K IN (vmware-tray) DO TSKILL %%K /A

cd %TEMP%
IF EXIST %TEMP%\vmware-Admin3400\NUL DEL %TEMP%\vmware-Admin3400\*.*
IF EXIST %TEMP%\vmware-Admin3400\NUL RD %TEMP%\vmware-Admin3400
DEL *.log /F /Q /A
CD %windir%\Temp
CD
dir

DEL *.log /F /Q /A
------------------------------------
Das Starten sieht so aus:
------------------------------------
@Echo off
cls
cd \
c:
cd \
cd WINDOWS\SYSTEM32

start C:\Programme\VMware\Workstation\vmware-tray.exe /WAIT
REM sc start MSDTC
REM sc start VMAuthdService
REM sc start vmount2
REM sc start VMnetDHCP
REM sc start "VMware NAT Service"

for %%I IN (VMAuthdService vmount2 VMnetDHCP "VMware NAT Service") do sc start %%I /WAIT
----------------------------------------

Die Dateiendung sollte .cmd sein.

Viel Erfolg, Thomas :-)

bei Antwort benachrichtigen