PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Batch-Skript Tasklist |find hohe CPU-Auslastung


Screemer
2021-04-01, 14:39:39
Hi

Handelt sich jetzt nicht wirklich um ein programmiertechnisches Problem. Aber dachte hier ins Subforum passt es trotzdem am besten.

Ich überwache mit einem einfachen Batch-Script ob ein Task läuft. Ist dieser nicht mehr aktiv führe ich damit ein weiteres Script aus und beende den "Watchdog" dann.

@echo off
:running
tasklist /v|find "TASKNAME" >nul &&echo waiting || goto finished
timeout 1 >nul
goto running
:finished
echo "Start SCRIPT and Exit"
exit 0

Leider verursacht das einen völlig indiskutablen CPU-Laod von 7-15%. Hat jemand eine Idee wie man das Optimieren könnte oder fällt ihm eine andere einfache Möglichkeit ein die selbe Aufgabenstellung umzusetzen?

Monger
2021-04-01, 15:29:21
Naja, zuerst einmal: ist es wirklich notwendig, jede Millisekunde zu pollen?

Die weit komplexere Lösung ist, sich direkt von dem passenden WMI Event benachrichtigen zu lassen:
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/register-wmievent

Da ist die Rechenlast dann wirklich null, weil dein Callback sich nur auf ganz wenige Events abonniert, und nur dann ausgeführt wird.

Screemer
2021-04-01, 15:39:38
Hab den Timeout (timeout /t <timeoutinseconds>), der in sekunden angegeben wird, höher gesetzt. bei jedem loop hat man dann 10% cpu-load.

werd mir die wmi events mal ansehen. hab allerdings 0 erfahrung mit powershell. mal sehen ob ich das hinbekomme.

Monger
2021-04-01, 17:28:10
Tasklist hat ne Filteroption. Das ist mit Sicherheit viel schneller, als wenn du über find filterst. Probier das mal aus.

Screemer
2021-04-01, 17:55:37
mit

:running
tasklist /FI " WINDOWTITLE eq %process%" >nul &&echo waiting || goto finished
timeout /t 1 >nul
kommt der watchdog nicht über 1% load. setze ich jetzt noch den timeout entsprechend hoch, dann ist er völlig vernachlässigbar.

thx!