Webbrowser schließen mit python

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

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.
Antworten