Elternprozess beenden

Günni

Günni

Shell-Kommandant
Hi!

Ist es möglich, dass ein Kindsprozess sein Elternprozess beendet?

Ich starte per xterm -e script ein entferntes Programm über einen lokalen XServer (das muss ich so tun, weil das direkte Starten zum Absturz des Programmes führt). Dann habe ich aber neben dem eigentlichen Programm noch das xterm im Bildschrim hängen, dass ich zwar jedesmal manuell schließen kann, aber lästig ist.
script sieht so aus:

Code:
#!/bin/bash
nohup programm
kill -15 $PPID
exit

Nur die 3. Zeile scheint keinen Effekt zu haben.

Weiß jemand was dazu?

Gruß
Günni
 
Hallo
Eine Prozess, der seinen Parent-Prozess killt wird zum Zombie!
Warum setzt du nicht einfach ein exit der aufrufenden Shell dahinter?
xterm -e "script.sh" && exit
Damit beendet sich xterm nach erfolgreicher Ausführung des Scriptes selbst.

Gruß Wolfgang
 
Hallo,

klar kannst Du das. Der Elternprozess wird sich beenden, sobald er und sein Kindprozess unabhängig voneinander sind. Dein nohup macht das Eine, jetzt musst Du nur noch dafür sorgen, dass Dein Kindprozess im Hintergrund läuft ;-)

Code:
#!/bin/bash
nohup programm &
kill -15 $PPID
exit

Oder wie ich grade sehe, hat Wolfgang noch eine andere Möglichkeit.

@Wolfgang:
Eine Prozess, der seinen Parent-Prozess killt wird zum Zombie!
was zu diskutieren wäre, ob das in diesem Falle auch so ist:
- Aus einem xterm mit bash heraus ein Programm (xosview) gestartet. xterm beendet -> bash beendet -> xowview schließt sich. Wie es zu erwarten ist. Der Prozess schickt seinen Kindern ein SIGHUP, die beenden sich.
- Aus einem xterm mit bash heruas xosview & gestartet. xterm beendet -> gleicher Effekt.
- Das gleiche mit nohup -> init wird zur PPID des Prozesses (xosview), dieser wird nicht beendet.
- Das obige Skript mit einem kill -15 $PPID und das xterm schließt sich, xosview erhält als PPID 1 und läuft weiter (Status S oder R). Kein Zombie weit und breit zu sehen.

Könnte es sein, dass die zur Interpretation verwendete bash ihre $PPID killt (mit SIGTERM), die dann ihrerseits ihrem Kind ein SIGHUP sendet, worauf dieses sich beendet? Das nachfolgende "exit" ist dann ohne Belang.
Verifiziert: Direkt im Anschluss an das das "kill -15 $PPID" ein "> /tmp/trulala" funktioniert nicht mehr, /tmp/trulala wird nicht angelegt.

System: Linux auf der Basis von SuSE 9.3, aber ziemlich stark verändert, Kernel: Vanilla 2.6.16

Gruß
 
Zuletzt bearbeitet:
Erstmal Danke für Eure Tipps, leider hat aber beides nicht zum Erfolg geführt.

Ich habe noch einige zig verschiede Möglichkeiten ausprobiert, und dabei ist erstmal herausgekommen, dass das PPID sichern ganz an den Anfang des Scripts muss, weil die Prozess ID nicht die, des Xterms war (und ich konnte auch nicht herausfinden zu was sie gehört, kein prozess mit dieser nummer ist in der liste aufgetaucht:think: )

Das Xterm lässt sich so zwar endlich beenden, aber es wird von Init irgendwie neu aufgebaut und ich hatte am End sogar 2 Prozesse meines Programms -aber nur ein Anwendungsfenster... ist mir ein Rätsel... ?(

-jedenfalls wird das jetzt durch ein kleines sleep ausgeglichen, so dass nur noch die Anwendung an sich zum SChluss geöffnet ist, dessen Parent jetzt Init ist.

Ich denke, es sollte egal sein, ob die Anwendung den Sshd oder Init als Parent hat, oder sieht da vielleicht jemand mögliche Probleme drin?
so siehts nu aus:
Code:
#!/bin/bash
echo $PPID > ~/xterm_pid
nohup programm&
sleep 1 &&
kill -9 `cat ~/xterm_pid`
exit

Aufruf trivial: xterm -e script

bis dann!
Günni 8)
 
Hmm,

das ist seltsam. Auf welchem Rechner arbeitest Du denn? Du startest das xterm remote aber mit lokalem Display? Wie denn? Per ssh -X? Die PPID der bash, in der das Skript laufen soll, ist IMMER das xterm, wenn Du es mit "xterm -e script" aufrufst. Auf dem lokalen Rechner wirst Du PID und PPID allerdings nicht sehen, weil das xterm ja remote läuft (wenn meine Annahme stimmt).
Und warum Du ein sleep dazwischen brauchst, ist mir erst recht ein Rätsel...

Gruß
 

Ähnliche Themen

Das automatische Beenden von programmen beim PC-Runterfahren

Programm automatisiert auf mehreren Rechnern starten und beenden

schlafende Prozesse

DISPLAY Variable

Problem mit nohup

Zurück
Oben