Neues Konsolenfenster in Python öffnen und nach X sec terminieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
scanbot90
User
Beiträge: 11
Registriert: Freitag 1. Juni 2018, 07:40

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?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 18267
Registriert: Sonntag 21. Oktober 2012, 17:20

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