Mit subprocess.call xterm starten und parent schließen

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.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Um der Sache auf die Schliche zu kommen, hier mal eine quick&dirty Funktion dazu:

Code: Alles auswählen

def print_processpath(pid):
    while pid:
        print os.popen('ps -p %d -opid=,command=' % pid).read().strip(), os.getsid(pid) == pid
        pid = int(os.popen('ps -p %d -oppid=' % pid).read().strip())
Ruft man diese mit `print_processpath(os.getpid())` auf, so sieht man die Elternprozesse (PID und Command) bis zum Root-Prozess (init). Das Flag dahinter zeigt an, ob ein Prozess session leader ist. Was es alles damit auf sich hat - siehe http://ftp.gnu.org/old-gnu/Manuals/glib ... bc_27.html

Ruft man das in einem xterm mit Shell in ipython auf, sieht es so aus:

Code: Alles auswählen

In [5]: print_processpath(os.getpid())
13689 /usr/bin/python /usr/bin/ipython False
13441 bash True
13439 /usr/bin/xterm False
4187 init --user True
4161 lightdm --session-child 12 25 False
1188 lightdm True
1 /sbin/init True
in 'xterm ipython' dagegen:

Code: Alles auswählen

In [3]: print_processpath(os.getpid())
13769 /usr/bin/python /usr/bin/ipython True
13767 xterm ipython False
13441 bash True
13439 /usr/bin/xterm False
4187 init --user True
4161 lightdm --session-child 12 25 False
1188 lightdm True
1 /sbin/init True
xterm verhält sich nun so, dass es sich beendet, wenn der erste session leader am pty-slave stirbt (dabei wird das SIGHUP an alle Kinder ausgelöst). Alternativ könnte man auch xterm direkt beenden, was der Urbedeutung des SIGHUP (Gegenstelle des Terminals hat aufgelegt) gleich kommt und immer dann passiert, wenn man den Schliessen-Button des Fenstermanagers drückt.
Antworten