Prozesslaufzeitüberwachung

  • Hallo !!
    Ich melde mich gleich mit einer neuen Frage zurück.... (Ich war die letzten Monate leider etwas verhindert und nur sporadisch online) leider bin ich wieder etwas eingerostet X( X(

    Ich muss eine Prozesslaufzeitüberwachung machen.

    das heisst: ein Programm wird immer wieder gestartet und wieder gestoppt.(mal 5mins dann 30mins Pause, mal 2h dann 1h pause, mal 30mins, usw.) dies darf aber am Tag für maximal 8 Stunden geschehen.
    also ich muss jeden Start kennzeichnen und jeden Stopp. und die summe dieser laufzeiten dürfen nicht die 8 Stunden überschreiten.

    wie mach ich das am besten .......

    lg
    TOM

  • So z.B.:

    Spoiler anzeigen
    [autoit]

    Global $iMaxLaufzeit = 5000 ; 1000*60*60*8 = 8 Stunden
    Global $iMs = 0
    Global $sProcess = "notepad.exe"
    Global $iTimer = 1000 ; alle 1000ms nachsehen ob Prozess vorhanden

    [/autoit] [autoit][/autoit] [autoit]

    While $iMs < $iMaxLaufZeit
    Sleep($iTimer)
    IF ProcessExists($sProcess) Then $iMs += $iTimer
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite("Maximale Lauzeit überschritten" & @crlf) ; oder was auch immer
    Exit(1)

    [/autoit]

    Das Ganze mit dem Taskplaner alle 24 Stunden neu starten und gut.

    Grüße
    Stilgar

    Einmal editiert, zuletzt von Stilgar (29. Juni 2008 um 12:08)

    • Offizieller Beitrag

    Vielleicht so:

    Spoiler anzeigen
    [autoit]


    $time = 0
    $endtime = 28800 ; in Sekunden
    $process = "notepad.exe"
    Do
    ProcessWait($process)
    $used = TimerInit()
    Do
    Sleep(100)
    $tmp = Int($time+TimerDiff($used)/1000)
    If $tmp > $endtime Then ExitLoop 2
    ToolTip($tmp & ' sek.')
    Until Not ProcessExists($process)
    ToolTip('')
    $time += Int(TimerDiff($used)/1000)
    Until $time > $endtime
    ProcessClose($process)
    ToolTip('')
    MsgBox(0,'','Zeit abgelaufen')

    [/autoit]


    Edit: Mist! Stilgar war schneller.

  • .... und kürzer .... :)
    Ich hätte aber wohl auch Timerinit() / TimerDiff() verwendet...

    Das Problem bei Stilgar KÖNNTE sein, dass die 8 Std nicht korrekt eingehalten werden, wenn der Rechner mal 'hängt' bzw. langsam ist, werden evtl. nicht alle 1000 millisec auch die 1000 millisec zusammengezählt. (bei 8Std ist die Toleranz vielleicht vernachlässigbar?!?!)

    Das Problem bei Oscar ist aber, dass es nicht jeden Tag neu startet.

    Das Ziel für TomTom ist also aus beiden was tolles zusammenzubauen :)

    Grüße Carsten

  • Dass man mit sleep evtl. auf diese Zeit einiges unterschlägt ist klar. Kommt darauf an wie genau man es möchte.
    Mit sleep hat man keinerlei CPU-Nutzung in der Pause während Timer... in einer Dauer-Schleife 100% CPU-Last erzeugt.

    Hier ein paar Messungen und Mehr:
    http://www.autoitscript.com/forum/index.php?showtopic=74082

    ganz unten steht dazu auch ein "Hybrid"-Sleep das die CPU-Last durch die Timer-Funktionen senkt.

    Den Zähler könnte man evtl. auch per AdLib machen. Fragt sich wie genau das denn nun wieder ist.

    [EDIT]
    Also bei mir ist Sleep 1000, mit gleichzeitig normaler Nutzung des Rechners, bei 100 Messwerten, durchschnittlich 1013ms lang.

    [EDIT]

    Spoiler anzeigen
    [autoit]

    Global $iMaxLaufzeit = 10000 ; 1000*60*60*8 = 8 Stunden
    Global $iMs = 0, $timer
    Global $sProcess = "notepad.exe"
    Global $iTimer = 1000 ; alle 1000ms nachsehen ob Prozess vorhanden

    [/autoit] [autoit][/autoit] [autoit]

    While $iMs < $iMaxLaufZeit-1000 ; -1000: dann läuft es garantiert nicht länger
    $timer = TimerInit()
    Sleep($iTimer)
    IF ProcessExists($sProcess) Then $iMs += TimerDiff($timer)
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite("Maximale Lauzeit überschritten" & @crlf) ; oder was auch immer
    Exit(1)

    [/autoit]

    3 Mal editiert, zuletzt von Stilgar (29. Juni 2008 um 14:32)

  • He Leute !!

    danke für die Ideen !!! funzt soweit supa !!! ABER wie mach ich das wenn der Computer abgestürzt oder abgeschaltet (ausgeloggt) wurde ?
    da fängt er ja von vorne an zum zählen. Das ist etwas blöd.


    der Hintergrund dieses Programmes ist:
    Ich muss meinem Sohn eine Zeitgrenze setzen 8h wird er eh nicht spielen dürfen eher 4h am Tag das reicht. (wir sind überzeugt das er kurz vor einer Computersucht steht !!! ) Reden nützt nicht da leider nicht viel da versucht er zu verhandlen und zu diskutieren (er hat nicht 4 stunden gespielt sonder 3,5 und und und). Wenn der Computer von selbst sagt es ist aus dann gibt es keine Diskusion...... der Compi zählt genau genau (na ja 5 mins auf oder ab ist somit kein Problem bei 4 Stunden)

    Die ganzen ParentsFriends und so funzen bei mir in der Domain nicht so toll. Somit muss ich was eigenes schreiben.
    Was ich schon geschrieben habe ist eine Zeiteinschränkung er darf von 10h bis 21h in diesem Zeitrahmen spielen. Jetzt fehlt nur noch die Einschränkung der Spielezeit (Spiel GW.exe ).
    Arbeiten soll er aber ja noch dürfen word,Excel, und co.

    danke für eure Hilfe

    lg
    TOM

  • Könnte man so machen:
    1) Wert + Datum jedes mal in die Registry schreiben.
    2) Beim Starten des Programms die Werte auslesen, bei Datumswechsel Dauer auf 0 setzen :)

    Funktionen:
    _NowCalcDate(
    _DateDiff(
    Regread / Regwrite

  • @propagandy: Du unterschätzt den Einfallsreichtum der "jungen Generation". Wenn meine Elterm mit sowas kommen würden (können aber net proggen), dann würde ich zur Not alle (auch schwere) Geschütze auffahren. Z.B. Passwort irgendeines Kontos verändern ist für mich nach diversen Youtube-Tuts kein Problem(habs aber auch beim ersten mal kapiert und verständlicherweise nur zur Information angeschaut ;) )
    Dann alternative Taskmanager (falls der über Gruppenrichtlinie gesperrt wird kann ich ihn sowieso von der Registry aus wieder entsperren), CMD trotz irgendwelchen Einschränkungen öffnen, gleich neues Adminkonto erstellen...
    Also da müsstest du schon sehr tief ins System rein um mich zu stoppen. Und selbst dann gäbe es bestimmt noch Möglichkeiten (man denke nur an Notfall-Boot-CDs und ein so eingestelltes Linux, dass es zwar NTFS einlesen kann, aber die Rechte ignoriert(falls das nicht sowieso Standart ist). Löschen jeglicher Dateien einfach möglich...)

    Das war jetzt mal meine Ansicht
    .
    PS: Falls es illegal gemäß den Forenregeln ist, auf solche Möglichkeiten hinzuweisen (ich habe ja keine Anleitungen gepostet) dann bitte ich darum dies zu entschuldigen und den Beitrag zu löschen/editieren.

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    Einmal editiert, zuletzt von Fast2 (5. Juli 2008 um 00:42)