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.
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Hi habreli,
gehe mal auf die Konsole und gib taskkill /? ein
Wenn du taskkill /? >>mein.txt eingibst, kannst du dir den Syntax in der Textdatei ansehen, und ein entsprechendes Script basteln.
Ich würde das Script mit .cmd enden lassen, ist besser als .bat
Greez, Thomas
Hmm...
...mit Taskkill kann ich nicht wirklich die CPU-Last eines Programms checken. Oder hab ich da was übersehen?
Und auf Taskkill /im StehendesProgramm.exe /fi "status eq not responding" bekomme ich:
Es werden keine Tasks mit den angegebenen Kriterien ausgeführt.
Sprich - Taskkill erkennt nicht, dass das Programm hängt.
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 :-)
Vielen Dank für Deine ausführliche Info.
Und... ich habe VOR dem Schreiben nachgeforscht....darum die Frage, ob ich evtl. was übersehen habe...
Meiner Meinung nach geht TASKKILL an der Anforderung vorbei. Dass ich damit ein beliebiges Programm abbrechen kann ist mir schon klar.
Nur: Da muss ich vor dem Rechner stehen und sehen, dass das Programm hängt - dann kann ich das Script starten - klar.
Die Frage bzw. Anforderung war jedoch - Zitat:
Nun suche ich ein scriptfähiges Tool, mit welchem ich die CPU-Last eines Prozesses/Programmes abfragen kann.
So könnte ich z.b. per Scheduler alle paar Minuten checken ob das Programm normal läuft (1-2% CPU Last) oder "hängt" (98-100% CPU Last). Und falls dies der Fall ist, könnte man mit Taskkill abschießen und neu starten.
Aber ich kann derzeit nicht checken, ob das Programm CPU-Last produziert oder nicht.
Achso Habreli, du willst das automatisieren.
Tja, ich habe lange Gegoogelt, aber leider nix gefunden.
http://www.pqtuning.de/server2003/konsole/konsole.htm
http://www.winhelpline.info/daten/dos/
dürfte wohl so ziemlich alles sein, was mit der Konsole zu machen ist.
Fällt mir im Moment leider nix ein dazu. :(
Sorry, Thomas
mit einer programmiersprache wie C könntest du per winapi die prozesse inklusive ihrer eigenschaften -> dazu gehört bei windows auch die verursachte auslastung
abfragen. und die WinAPI stellt praktischerweise auch funktionen bereit um tasks sterben zu lassen.
Also von C habe ich null Ahnung, wie das beim Habreli ist weiß ich natürlich nicht. ..
Ich habe bestimmt einen Ganzen Tag lang mit "Systemprotokolle und Warnungen" ein Ereignis auszulösen; --->keine Chance. :(
Es ist mit zwar gelungen, mit Hilfe der Systemwarnung eine Meldung in die Systemereignisse zu schreiben, sobald der Prozi. über 20% Auslastung geht, aber diese Warnung weigert sich ein Programm oder eine .cmd auszuführen, obwohl die Einstellung von Warnungen dies ermöglicht. Das Prog wird einfach nicht gestartet.
Ich habe es nach einem sehr langen Tag und 100erte Versuche frustriert aufgegeben. :((
Es besteht aber durchaus die Möglichkeit, dass diese Methode auf einem anderen System funktioniert. ..
Mein MCE2002 ist der letzte Schrott. Jedes XP-Prof ist um Lichtjahre besser.
Gruß, Thomas
wenn ich zeit zwischen der arbeit habe setz ich mich heut abend mal dran
Whow, das ist aber lieb von dir. Da werden sich bestimmt mindestens zwei freuen. .. ;)
Ich kämpfe gerade mit dem Thunderbird. .. :(