Re: Mit subprocess.call xterm starten und parent schließen
Verfasst: Sonntag 3. August 2014, 12:19
Um der Sache auf die Schliche zu kommen, hier mal eine quick&dirty Funktion dazu: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: in 'xterm ipython' dagegen:
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.
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 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
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