Webbrowser schließen mit python

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Benutzeravatar
__blackjack__
User
Beiträge: 13152
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()
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
nezzcarth
User
Beiträge: 1638
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