Seite 1 von 1

Re: Webbrowser schließen mit python

Verfasst: Montag 11. Januar 2021, 16:00
von __blackjack__
@joernius: Umständlich und je nach Programmname und was da so läuft auch gefährlich kaputt. Je kürzer der Programmname desto wahrscheinlicher das als Kollateralschaden noch ganz andere Prozesse beendet werden. Sollte der Programmname zufällig im Namen des Benutzers enthalten sein, dann werden sogar *alle* Prozesse von dem Benutzer beendet.

Das Problem ist durch `driver.close()` je bereits einfach und sicher gelöst. Aber falls man wirklich selbst nach dem Namen beenden will, dann gibt es das bereits erwähnte `psutil`-Modul

Code: Alles auswählen

#!/usr/bin/env python3
from signal import SIGKILL, SIGTERM

import psutil


def send_signal(processes, signal):
    for process in processes:
        try:
            process.send_signal(signal)
        except psutil.NoSuchProcess:
            pass


def main():
    processes = [
        process
        for process in psutil.process_iter()
        if process.name() == "firefox"
    ]
    send_signal(processes, SIGTERM)
    _, still_alive = psutil.wait_procs(processes, 3)
    send_signal(still_alive, SIGKILL)


if __name__ == "__main__":
    main()

Re: Webbrowser schließen mit python

Verfasst: Montag 11. Januar 2021, 18:09
von nezzcarth
Hinzu kommt, dass man ps nur selten in Kombination mit grep braucht, denn dafür gibt es pgrep oder pidof, sowie weiterhin pkill, das auf Basis von Namensbestandteilen operiert. Die gezeigte Pipeline ist äquivalent zu pkill -f <prozessname>. Ich würde das aber wie ja schon mehrfach gesagt wurde gar nicht so machen.