Seite 2 von 2

Re: Neues Konsolenfenster in Python öffnen und nach X sec terminieren

Verfasst: Dienstag 5. Juni 2018, 20:55
von scanbot90
Leider kann ich den oberen Beitrag nicht mehr bearbeiten..

Korrektur:
Wenn ich Airodump-ng normal in der Shell starte, zeigt mir Top auch zwei Airodump-Prozesse an.

Gibt es nicht die Möglichkeit ein "Strg+C" an den Unterprozess zu senden?

Re: Neues Konsolenfenster in Python öffnen und nach X sec terminieren

Verfasst: Dienstag 5. Juni 2018, 21:32
von __deets__
Das ist das, was kill macht. Ctrl-C ist ein Kommando, das die Shell abfaengt, und zu einem kill(pid, SIGINT( fuehrt. Das sollte also keinen Unterschied machen.

Ich habe gestern aber mal auf Arbeit vor einem Linux-Rechner gesessen, und tatsaechlich hat Sirius3 schon einen entscheidenden Hinweis gegeben: sudo startet das geforderte Programm wiederum als Unterprogramm.

Auf Stackoverflow findet sich dazu eine Loesung:

Code: Alles auswählen

p=subprocess.Popen(your_command, preexec_fn=os.setsid)
os.killpg(os.getpgid(p.pid), signal.SIGTERM)
https://stackoverflow.com/questions/263 ... rom-python

AAAAABER: das ist wieder ohne SUDO! Probier also stattdessen

Code: Alles auswählen

subprocess.call(["sudo", "kill", "-{}".format(os.getpgid(p.pid))])
statt des os.kill, weil das ja ohne sudo ist.

Re: Neues Konsolenfenster in Python öffnen und nach X sec terminieren

Verfasst: Dienstag 5. Juni 2018, 23:00
von Sirius3
Wie man Kind-Prozesse killt, hab ich ja schon vor ein paar Tagen gezeigt.

@scanbot90: Dein Exception-Handling ist auch mehr Hoffen als Wissen. In `send_interrupt` ist ein TypeError ein Programmierfehler, weil process dann kein Subprocess-Instanz wäre, UnboundLocalError ist immer ein Programmierfehler und sollte repariert werden und nicht abgefangen, kann hier aber nicht auftreten, AttributeError kann nur auftreten, wenn process keine Subprocess-Instanz ist, wäre also auch ein Programmierfehler. Bleibt als einzige Exception OSError, den man in diesem Fall sogar stillschweigend ignorieren könnte, wenn er nicht sagen würde, dass man keine Rechte hat, einen sudo-Prozess zu killen. Also keine Exception ist sinnvoll, weil alle das Finden von Fehlern unmöglich machen. Das gilt auch für das Exception-Handling weiter unten.

Bleibt die Frage, warum SIGINT in eine Funktion ausgelagert wurde, SIGTERM aber direkt im Hauptprogramm steht?

Ein Flag scan zu haben um eine while-Schleife zu unterbrechen und gleichzeitig diese Schleife per break zu verlassen, ist doppelt. Besser immer while-True-Schleifen schreiben, dann spart man sich das Flag. Der Busy-Loop, der den Bildschirm mit print-Ausgaben vollmüllt ist ungeschickt, die eingestreuten sleep wirken auf mich unmotiviert.