Elternprozess beenden

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Günni, 29.08.2006.

  1. Günni

    Günni Shell-Kommandant

    Dabei seit:
    27.02.2004
    Beiträge:
    73
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 29.08.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Eine Prozess, der seinen Parent-Prozess killt wird zum Zombie!
    Warum setzt du nicht einfach ein exit der aufrufenden Shell dahinter?
    Damit beendet sich xterm nach erfolgreicher Ausführung des Scriptes selbst.

    Gruß Wolfgang
     
  4. #3 phrenicus, 29.08.2006
    Zuletzt bearbeitet: 29.08.2006
    phrenicus

    phrenicus Routinier

    Dabei seit:
    24.05.2006
    Beiträge:
    253
    Zustimmungen:
    0
    Ort:
    Tübingen, Germany
    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:
    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ß
     
  5. Günni

    Günni Shell-Kommandant

    Dabei seit:
    27.02.2004
    Beiträge:
    73
    Zustimmungen:
    0
    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)
     
  6. #5 phrenicus, 30.08.2006
    phrenicus

    phrenicus Routinier

    Dabei seit:
    24.05.2006
    Beiträge:
    253
    Zustimmungen:
    0
    Ort:
    Tübingen, Germany
    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ß
     
Thema: Elternprozess beenden
Besucher kamen mit folgenden Suchen
  1. linux xterm beenden

Die Seite wird geladen...

Elternprozess beenden - Ähnliche Themen

  1. Singale im elternprozess abfangen

    Singale im elternprozess abfangen: Hallo wiedermal, besteht die möglichkeit das mein parent sigint für das kind abfängt und an es weiterleitet ? denn sinn der sache verstehe ich...
  2. SSH Session per Script beenden

    SSH Session per Script beenden: Anscheinend stehe ich auf der Leitung. ?( Habe ein Script /usr/local/bin/rotation.sh, das per SSH remote ausgeführt werden soll. Da das Script...
  3. Befehl beim Session beenden

    Befehl beim Session beenden: Hallo allerseits, ich habe vor ein Verzeichnis auf meinem Webserver zu verschlüsseln. Ich will, sobald ich darauf zugreifen muss/will eine...
  4. for-Schleife vorzeitig beenden

    for-Schleife vorzeitig beenden: Hallo, ich habe mir ein Skript geschrieben das mir den Audiostream einer Video-DVD in wav-Dateien kapitelweise speichert. Das extrahieren des...
  5. Assistent erster Start lässt sich nicht beenden [gelöst]

    Assistent erster Start lässt sich nicht beenden [gelöst]: Hallo, habe mir hier gerade den Rechnet neu afgesetzt mit Mandriva 2010. Am Anfang (beim ersten Start) kommt ja immer ein Assistent, der ein...