Wie kann ich alle laufenden Tasks "chrome.exe" beenden?

  • Ich möchte mit einem Skript alle laufenden Tasks beenden, die im Taskmanager im Reiter Details mit "chrome.exe" angezeigt werden. Das sind meist 4 Tasks, die kurz nach Start des Rechners automatisch laufen. Browserfenster werden nicht zwangsläufig gestartet.

    Dazu habe ich das gefunden:


    Local $process = ProcessList("chrome.exe")

    For $i = 1 To $process[0][0]

    ProcessClose($process[$i][1])

    Next


    Leider passiert da nichts, die Tasks bleiben bestehen.

    Wenn ich aber im Taskmanager den chrome.exe Task mit der größten Speicherbelegung wähle und diesen manuell beende, zieht das die anderen Tasks mit sich und alle werden beendet.

    Worin besteht mein Fehler?

  • Was sind die Returnwerte von ProcessList und ProcessClose bzw. die Werte von @error und @extended?

  • Wenn ich folgendes bei Firefox (4 laufende Prozesse) mache, dann funktioniert es.

    AutoIt
    Local $aProcessList = ProcessList("Firefox.exe") ; <== hier "Chrome.exe" eintragen 
    For $i = 1 To $aProcessList[0][0]
        ConsoleWrite(" --------------------------------------" & @CRLF)
        ConsoleWrite(" Process Name = " & $aProcessList[$i][0] & @CRLF)
        ConsoleWrite(" Process ID   = " & $aProcessList[$i][1] & @CRLF)
        ProcessClose($aProcessList[$i][1])
        ConsoleWrite(" Error = " & @error & "  Extended = " & @extended & @CRLF)
    Next

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hallo 32vroni , ich mache es bei mir so:

    Grund: Die einzelnen Einträge sind die Tabs, du musst aber das Hauptfenster schließen.

    Das kann man daran erkennen, das es z.B. einen Fenstertitel hat.

  • Grund: Die einzelnen Einträge sind die Tabs, du musst aber das Hauptfenster schließen.

    Das kann man daran erkennen, das es z.B. einen Fenstertitel hat.

    Hi Moombas

    Funktioniert das auch, wenn Du mehrere Instanzen des Browsers geöffnet hast ?

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hi Musashi,


    das habe ich persönlich noch nie getestet, da ich bei mir immer nur 1 Instanz laufen habe und nur für das Sortieren der Fenster bei Arbeitsplatzwechsel (Büro <-> Laptop <-> Zuhause) nutze.

    Aber theoretisch müsste das, wenn man das Exitloop raus nimmt auch bei mehreren Instanzen funktionieren (würde dann alle beenden).

    Ist auch nur einkleiner Ausschnitt. Das ganze sieht bei mir im Original so aus, da noch ein wenig mehr Funktionen aufgerufen werden:



    Für Mehrere Instanzen müsste das dann wohl ungefähr so aussehen:


  • Aber theoretisch müsste das, wenn man das Exitloop raus nimmt auch bei mehreren Instanzen funktionieren (würde dann alle beenden).

    Ja, das denke ich auch. Bei Firefox scheint es, wie gesagt, egal zu sein.


    In den Bemerkungen (aus der Hilfe) zur Funktion ProcessClose steht :
    Wenn mehrere Prozesse den gleichen Namen haben, dann wird derjenige mit der höchsten PID beendet - egal, wann er gestartet wurde.


    Da wir aber das Array aller Prozesse (mit identischem Namen) durchlaufen, sollte das keine Rolle spielen. Ich habe das Array trotzdem mal nach PID (absteigend) sortiert :

    AutoIt
    #include <Array.au3>
    Local $aProcessList = ProcessList("Firefox.exe") ; <== hier "Chrome.exe" eintragen
    _ArraySort($aProcessList, 1, 1, default, 1)
    For $i = 1 To $aProcessList[0][0]
        ConsoleWrite(" --------------------------------------" & @CRLF)
        ConsoleWrite(" Process Name = " & $aProcessList[$i][0] & @CRLF)
        ConsoleWrite(" Process ID   = " & $aProcessList[$i][1] & @CRLF)
        ProcessClose($aProcessList[$i][1])
        ConsoleWrite(" Error = " & @error & "  Extended = " & @extended & @CRLF)
    Next

    (wird aber vermutlich nichts bringen)

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Wozu umständlich, wenn es auch einfach und direkt geht?


    https://www.autoitscript.com/a…nAPI_GetParentProcess.htm


    Damit bekommst du die PID des Parent Prozesses eines beliebigen Unterprozesses. Der Parentprozess muss nicht zwangsläufig ein Fenster und erst recht keinen Fenstertitel haben. Mag vielleicht bei Chrome und FF derzeit zutreffen, aber dass das prinzipiell so wäre und auch so bleibt würde ich mal lieber nicht annehmen.


    32vroni

    Laufen die "chrome.exe" Prozesse alle im gleichen Benutzerkontext, oder handelt es sich evtl. um Prozesse eines anderen Benutzers / Dienstes? Ist letzteres der Fall fehlen deinem Autoit Prozess die Berechtigungen um die Prozesse zu beenden. Hier helfen in der Regel Adminrechte für das Script. In sehr seltenen Fällen sind sogar Systemrechte notwendig (z.B. möglich wenn es sich um Unterprozesse eines Updatedienstes handelt).

  • Kann man mit einem Befehl sämtliche Unterprozesse eines Prozesses beenden ohne über deren einzelne Unter-PIDs zu laufen? Also mit PID 18612 den geckodriver, conhost und alle firefox.exe?


  • Nein kann man so nicht.

    Auch der Process Explorer wird höchstwahrscheinlich die Prozesse einzeln durchgehen.


    Aber man kann sich ja eine kleine Hilfsfunktion schreiben, welche genau das erledigt:

  • Perfekt, danke - kann ich direkt so übernehmen.
    Ich hatte an etwas wie "Kill Process Tree" beim Process Explorer gedacht, aber der kann natürlich genau so sequentiell arbeiten wie Dein Script.

  • Moin.

    Also bei mir sehe ich so, ob ein Process aktiv ist und dann "kill" ich den.
    Beim Bsp. handelt es sich um zwei Processe die beim Start des BS/OS Win7 von Windows aufgerufen wird und der mich immer störten.


    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?