Freitag, 25. Mai 2012, 20:41

Du bist nicht angemeldet.



Walter_vdV

hat sich gut eingelebt.

  • »Walter_vdV« ist der Autor dieses Themas

Beiträge: 96

Ubuntu: 10.10

Architektur: 32-bit

  • Private Nachricht senden

1

Freitag, 14. Januar 2011, 14:48

Der Kindprozess wurde unerwartet mit Status x beendet. Was mache ich falsch?

Hallo zusammen,
ich habe einige Scripts, selbst gestrickt, geschenkt bekommen und geklaut . Um nun nicht jedesmal im Terminal das Script aufrufen zu müssen habe ich mir auf dem Desktop Starter angelegt. Im Starter habe ich als Typ "Anwendung im Terminal" ausgewählt. Muss ich ja auch, da ich eine Oberfläche für Eingaben brauche, wenn ich das Script als Anwendung aufrufe passiert gar nichts. Im Terminal habe ich eingestellt, dass das Terminal geöffnet bleiben soll, ween der Befehl beendet wird. Ist ja auch wichtig, sonst sehe ich ja evtl. Ergebnisse nicht.
Als Beispiel mein Lieblingsscript (auch geklaut), dass auf sehr einfache aber effiziente Weise ein "de-en"-Wörterbuch realisiert.

Quellcode

1
2
3
4
5
6
#!/bin/bash
clear
echo -n "Bitte geben Sie den Suchbegriff ein: "
read suche
grep -i --color $suche ~/Daten/Dictionary/ger-engUTF8.txt
exit 0

Wie man sieht, braucht man hier das Terminal um den Suchbegriff einzugeben und um das Ergebnis anzuzeigen.
Wenn ich das Script im Terminal aufrufe - Super! Aber beim Aufruf über den Starter bekomme ich nach Anzeige des Ergebnisses oben genannte Fehleranzeige, wobei "x" immer die Zahl ist, die ich bei "exit" angebe. Im Terminal wird mir auch kein "prompt" mehr angezeigt, das Script/Terminal hängt sich quasi auf. Wenn ich das Terminal mit dem "X"-Button schliesse habe ich das Gefühl, dass das Terminal nicht sauber beendet wird. Denn wenn ich das öfter mache, habe ich das Gefühl das die Performance des PC leidet, aber das ist subjektiv.
Ihr könnt mir glauben ich habe mich die letzte Zeit sehr intensiv mit der Kommandozeile beschäftigt, sogar dem vim-Editor konnte ich was abgewinnen, aber was bei dem Aufruf des Scripts über den Starter falsch ist - grosses ?
Ich denke mal das das für die Altgedienten unter den Linux-Nutzern Peanuts sind.

Gruss Walter
Wer in meinem Beitrag einen Fehler findet, darf ihn behalten

basslord

Ubuntufreund

Beiträge: 2 671

Ubuntu: 12.04

Kernel: 3.2.0-24-generic

Desktop: KDE

Architektur: 64-bit

Danksagungen: 1 / 1

  • Private Nachricht senden

2

Montag, 17. Januar 2011, 15:25

Hallo,

dein Skript endet ja nach der Abfrage, also nicht so ganz unerwartet ;)
Ich würde es auch nicht über die Terminaleinstellungen lösen. Das würde für alle Terminals gelten und ist IMHO weniger schick.
Besser ist es, im Skript selbst das Geöffnet-Halten zu veranlassen. Für den Fall würde ja schon ein sleep ausreichen.

Gruß
Rodge
"Ohne Musik wäre das Leben ein Irrtum." - Friedrich Nietzsche

Walter_vdV

hat sich gut eingelebt.

  • »Walter_vdV« ist der Autor dieses Themas

Beiträge: 96

Ubuntu: 10.10

Architektur: 32-bit

  • Private Nachricht senden

3

Montag, 17. Januar 2011, 18:54

Hallo Rodge,
danke erst mal. Sei mir nicht böse, aber jetzt verstehe ich nur noch Bahnhof. Also die Einstellung, das Terminal offen zu halten will ich ja unbedingt beibehalten, das ist doch eine globale Einstellung und wenn ich normal mit dem Terminal arbeite, wäre das doch unwahrscheinlich nervig wenn ich bei jedem neuem Befehl immer wieder zuerst das Terminal aufrufen müsste. Es geht darum, kann ich meinen Aufruf des Scripts über den Starter im Script so gestalten, dass dies Fehlermeldung nicht kommt und das Script im Terminal ganz normal mit dem Prompt beendet wird.
Gruß Walter
Wer in meinem Beitrag einen Fehler findet, darf ihn behalten

basslord

Ubuntufreund

Beiträge: 2 671

Ubuntu: 12.04

Kernel: 3.2.0-24-generic

Desktop: KDE

Architektur: 64-bit

Danksagungen: 1 / 1

  • Private Nachricht senden

4

Dienstag, 18. Januar 2011, 11:32

Hallo Walter,

die Option, das Terminal geöffnet zu halten, produziert die Meldung. Es ist kein Fehler, denn das Skript endet (mit welchem Exit-Status auch immer). Das Terminal bleibt aber zwangsweise geöffnet und gibt den Status zurück. Was du anscheinend möchtest, ist ein neuer Prompt.
Also, falls ich das nun alles richtig verstanden habe, dann bleibe ich dabei, das Geöffnet-Halten taugt wenig. Probier mal aus, was passiert, wenn du mit dieser Einstellung ein Terminal mit exit verlassen möchtest. Genau, es bleibt geöffnet mit entsprechender Rückmeldung.

Du möchtest doch lediglich einen neuen Prompt. Dann hänge am Ende deines Skripts ein bash an, das sollte deine Lösung sein. Ohne an den Einstellungen des Terminals zu drehen. Mit meinem sleep lag ich offensichtlich daneben, du möchtest ja einen neuen Prompt und nicht das reine Ergebnis.

Quellcode

1
2
3
4
5
6
#!/bin/bash
clear
echo -n "Bitte geben Sie den Suchbegriff ein: "
read suche
grep -i --color $suche ~/Daten/Dictionary/ger-engUTF8.txt
bash


Mit der Zahl der Prozesse ist alles in Ordnung (war es auch schon bei deiner Lösung - zu prüfen z.B. mittels pgrep auf gnome-terminal/bash oder lsof)

Gruß
Rodge

Gruß
Rodge
"Ohne Musik wäre das Leben ein Irrtum." - Friedrich Nietzsche

Walter_vdV

hat sich gut eingelebt.

  • »Walter_vdV« ist der Autor dieses Themas

Beiträge: 96

Ubuntu: 10.10

Architektur: 32-bit

  • Private Nachricht senden

5

Dienstag, 18. Januar 2011, 18:12

Hallo Rodge,
danke. Ich habe jetzt mal anstatt "exit" so wie Du gesagt hast "bash" hinten dran gehängt. OK, Die Meldung mit dem Kindprozess ist nicht mehr da und ich bekomme auch den Prompt. Wenn ich jetzt aber das Terminal beende, mit Klick auf den [X]-Button, bekomme ich die Meldung, dass noch ein Prozess läuft. Ich habe dafür mal einen Screenshot mitgeschickt. Diese Meldung bekomme ich egal ob ich die Option "Terminal offen halten" oder "Terminal schliessen" wähle. Was ich nicht begreife ist folgendes:
Wenn ich ein Terminal öffne und in diesem Terminal irgend ein Script aufrufe läuft alles normal. In einem Starter mache ich doch das Gleiche, nur das ich die Aufrufe nicht mit Tastatur und Maus mache sondern mit einer Befehlsfolge. Ich kann ja den Starter auch als Anwendung konfigurieren und als Befehl
"gnome-terminal -e dictionary"
eingeben. Grundsätzlich ist doch das gnome-terminal nichts anderes als ein Programm, dass auf einer grafischen Oberfläche die Kommandozeile emuliert dem ich einen Parameter mitgebe.
Die Einstellung "Terminal offen halten" mache ich ja nicht wegen den Scripts, die rufe ich vielleicht 2/3mal am Tag auf, während ich mich im Terminal mit "man xx" und "xx --help" öfter tummle" und wenn dann jedesmal das Terminal geschlossen wird - das kann es ja nicht sein.
Ich hab das mal probiert mit "exit". Bei der Einstellung "Terminal schliessen" wird das Terminal sofort geschlossen, mit der Einstellung "Terminal offen halten" kommt die Meldung mit dem Kindprozess. Wenn man dann aber dann auf den Button "Befehl erneut ausführen" drückt ist die Meldung weg und man bekommt den Prompt.

Gruss Walter
»Walter_vdV« hat folgendes Bild angehängt:
  • Bildschirmfoto.png
Wer in meinem Beitrag einen Fehler findet, darf ihn behalten

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Walter_vdV« (18. Januar 2011, 18:12)


haliner

hat hier 2. Wohnsitz.

Beiträge: 423

Ubuntu: ---

Kernel: 2.6.39-ARCH

Desktop: KDE

Architektur: ---

  • Private Nachricht senden

6

Donnerstag, 20. Januar 2011, 15:13

Das liegt daran, dass dein Bash-Prozess ja noch läuft. Das sieht dann wie folgt aus: Das Terminal startet eine Bash-Shell, welche dein Script interpretiert und dieses Script startet am Ende noch eine zusätzliche(!) Bash-Shell, die auf die Eingaben wartet.

Ich würde das Problem umschiffen: Schreibe einfach statt bash oder exit ein read als letzten Befehl. Dann bleibt das Fenster offen und die aktive Bash-Shell wartet auf eine Eingabe. Du musst nur Enter drücken und das Fenster schließt sich.

Die Lösung ist nicht wirklich soo schön, aber wenn du nur selbst das Script nutzt, spricht auch wieder nichts dagegen :)

//edit: Lediglich eine Anmerkung: Dein letzter Befehl im allerersten Post (exit 0) ist nicht notwendig. Sobald die Shell am Ende des Scriptes angekommen ist, dann beendet sie sich automatisch mit dem Exit-Status 0. Du kannst ihn einfach weglassen. Es stört zwar auch nicht, wenn er da steht, aber aus anderen Postings erkennt man ja, dass es dir in erster Linie auch um das Verständnis geht :)

Gruß,
Stefan

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »haliner« (20. Januar 2011, 15:13)


basslord

Ubuntufreund

Beiträge: 2 671

Ubuntu: 12.04

Kernel: 3.2.0-24-generic

Desktop: KDE

Architektur: 64-bit

Danksagungen: 1 / 1

  • Private Nachricht senden

7

Donnerstag, 20. Januar 2011, 15:23

Ich glaube, das read wird auch nicht zufriedenstellend sein. Habe ja schon ein sleep angeboten. Wunsch ist aber ein Prompt nach Durchlauf des Skripts, wenn ich das korrekt verstanden habe. Daher das bash am Ende. Tja, bleibt noch die Meldung, die man aber auch bekommt, wenn mehr als ein Tab geöffnet ist. Mehr geht wohl net IMHO.

Gruß
Rodge
"Ohne Musik wäre das Leben ein Irrtum." - Friedrich Nietzsche