Prozess wird beim Beenden von Telnet gekillt

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
Wonderdoc
Neugieriger
Neugieriger
Beiträge: 9
Registriert: Mittwoch 7. November 2007, 18:34

Prozess wird beim Beenden von Telnet gekillt

Beitrag von Wonderdoc »

Hallo,

Ich habe ein Problem mit dem Telnetlogin auf der DBox2.
Zum testen habe ich mal die msgbox(Nachricht auf TV ausgeben) auf die DBox geladen.
Logge ich mich per Telnet ein und starte die msgbox mit
/var/bin/msgbox title="TestBox" popup="Testmsg" timeout=30 &
dann wird die Nachricht sauber ausgegeben und nach 30 sek beendet.
Logge ich mich in den 30 sek aber aus der Telnet-Session aus(exit oder einfach schließen),
dann bleibt die Nachricht daueraktiv.
lt PS läuft der msgbox-Prozess nicht mehr.
Dieses Problem konnte ich ebenfalls beim Ausführen eines Scriptes beobachten.

Ein Beenden von Telnet beendet scheinbar den aufgerufenen Prozess.
Mit einem Image von vor einem Jahr ging dieses noch problemlos.

Aktuell habe ich es mit dem neutrino-squashfs.img1x vom 07.11.07 von h**p://tuxbox2.trale.de getestet.

Ist dieses Problem bereits bekannt od. gibt es ein Workaround dazu?

mfg
Wonderdoc
wolgade
Semiprofi
Semiprofi
Beiträge: 1313
Registriert: Donnerstag 2. Dezember 2004, 00:18

Re: Prozess wird beim Beenden von Telnet gekillt

Beitrag von wolgade »

Wonderdoc hat geschrieben:Ein Beenden von Telnet beendet scheinbar den aufgerufenen Prozess.
Das halte ich für keinen Fehler. Wenn man sich von einer UNIX/Linux-Kiste abmeldet, dann werden alle Prozesse beendet, die aus der entprechenden Terminalsitzung resultieren. Wenn man das nicht will, muß man "nohup" verwenden.
Liontamer
Klöppelliese
Beiträge: 1644
Registriert: Donnerstag 8. August 2002, 12:51

Beitrag von Liontamer »

Durch das "&" am Ende des Befehls sollte der aber auch weiterlaufen, wenn die Telnet-Session beendet wird.
schufti
Einsteiger
Einsteiger
Beiträge: 352
Registriert: Freitag 20. August 2004, 23:33

Beitrag von schufti »

nö, das & schickt den prozess nur in den Hintergrund; auf die sigs beim Beenden der Session hört er trotzdem.

schufti
Hagan
Einsteiger
Einsteiger
Beiträge: 198
Registriert: Sonntag 15. Februar 2004, 20:33

Beitrag von Hagan »

Genau.

Und wie wolgade schon schrieb, brauchst Du als Workaround einfach nur nohup zu verwenden (und etwaige Ausgaben ins Nirvana zu schicken):

Code: Alles auswählen

nohup BEFEHL >/dev/null 2>&1 &
Wonderdoc
Neugieriger
Neugieriger
Beiträge: 9
Registriert: Mittwoch 7. November 2007, 18:34

Beitrag von Wonderdoc »

@ Hagan

Danke für den Tip.
Momentan ist nohup bei mir in der busybox aber nicht vorhanden.

Ab der busybox 1.8.x hat sich da aber folgenes geändert
telnetd: add -K option to close sessions as soon as child exits
telnetd: don't SIGKILL child when closing the session, kernel will send SIGHUP for us
Würde dieses auch den gewünschten Erfolg bringen?

mfg
Wonderdoc
flasher
Developer
Beiträge: 467
Registriert: Dienstag 15. Juli 2003, 10:58

Beitrag von flasher »

Wonderdoc hat geschrieben:@ Hagan

Danke für den Tip.
Momentan ist nohup bei mir in der busybox aber nicht vorhanden.

Ab der busybox 1.8.x hat sich da aber folgenes geändert
telnetd: add -K option to close sessions as soon as child exits
telnetd: don't SIGKILL child when closing the session, kernel will send SIGHUP for us
Würde dieses auch den gewünschten Erfolg bringen?

mfg
Wonderdoc
Wenn ich das richtig übersetze, dann hilft das auch nicht.
Beim Schliessen der Telnetsession wird der Prozess nicht durch den Vaterprozess gekillt sondern vom Kernel wenn dieser merkt, das ein Kind ohne Vater rumläuft. (Frei Übersetzt)

Kann mich auch irren.

Gruß
schufti
Einsteiger
Einsteiger
Beiträge: 352
Registriert: Freitag 20. August 2004, 23:33

Beitrag von schufti »

Hi,

das ist ja auch nur die Erklärung zum Fix. der Helptext zu telnetd gibt folgendes aus:
# telnetd --help
BusyBox v1.8.1 (2007-11-13 00:05:31 CET) multi-call binary

Usage: telnetd [OPTION]

Handle incoming telnet connections

Options:
-l LOGIN Exec LOGIN on connect
-f issue_file Display issue_file instead of /etc/issue
-K Close connection as soon as login exits
(normally wait until all programs close slave pty)

-p PORT Port to listen to
-b ADDR Address to bind to
-F Run in foreground
-i Run as inetd subservice
wodurch ziemlich eindeutig ist, dass -K nicht das gewünschte Verhalten zeigt. Die "connection" ist die telnetd Instanz, das child der "login" Prozess. Eine Auswirkung auf die childs des login Prozesses ist da AFAIK nicht gegeben.

da hilft nur warten, ob jemand BB mal mit nohup compiliert....

schufti[/b]
Wonderdoc
Neugieriger
Neugieriger
Beiträge: 9
Registriert: Mittwoch 7. November 2007, 18:34

Beitrag von Wonderdoc »

Hi,

in der Busybox 1.8.1 ist der telnetd lt SVN in der akt. Revision 20403
vorhanden.
Mir scheint, als ob es 2 getrennte Änderungen sind.

zum einen
Revision 20260
telnetd: some simplifications and better error hadling.
telnetd: don't SIGKILL child when closing the session.
kernel will seng SIGHUP for us.
und später
Revision 20262
telnetd: at Alexander Kriegisch <.....> insistence
add an option to close sessions as soon as child exits.
Maybe it should be a CONFIG option. OTOH, maybe it should be always on,
as it mimics, say, getty's behaviour.

+

Revision 20274
telnetd: make sure telnetd -K exits if child dies
Hat von euch jemand mal die Sache mit 1.8.1 nachgestellt.
Ansonsten werde ich mal die Sache mit nohub testen.

mfg
Wonderdoc
Wonderdoc
Neugieriger
Neugieriger
Beiträge: 9
Registriert: Mittwoch 7. November 2007, 18:34

Re: Prozess wird beim Beenden von Telnet gekillt

Beitrag von Wonderdoc »

So,
Frohes Neues erstmal.

Ich habe die Sache mit "nohup BEFEHL >/dev/null 2>&1 &" nun mal getestet.
Funktioniert ganz gut.
Ich starte das Script/Befehl wie beschrieben.
Kann ich die Ausgabe auch wieder auf die Telnet-Session umleiten?
Sonst sehe ich nicht, ob das Script/Befehl gestartet wurde.

mfg
Wonderdoc
hvkls
Interessierter
Interessierter
Beiträge: 75
Registriert: Dienstag 26. Dezember 2006, 09:28

Re: Prozess wird beim Beenden von Telnet gekillt

Beitrag von hvkls »

Ich denke, nein. Aber "ps aux" bzw. die Bildschirmausgabe von msgbox zeigen es dir doch?
Hagan
Einsteiger
Einsteiger
Beiträge: 198
Registriert: Sonntag 15. Februar 2004, 20:33

Re: Prozess wird beim Beenden von Telnet gekillt

Beitrag von Hagan »

Hallo
Wonderdoc hat geschrieben:Ich habe die Sache mit "nohup BEFEHL >/dev/null 2>&1 &" nun mal getestet.
Funktioniert ganz gut.
Ich starte das Script/Befehl wie beschrieben.
Kann ich die Ausgabe auch wieder auf die Telnet-Session umleiten?
Sonst sehe ich nicht, ob das Script/Befehl gestartet wurde.
Das geht, wenn Du statt nach /dev/null in eine Datei schreibst. Diese kannst Du dir dann mit "tail -f DATEI" ansehen.
Das birgt allerdings u.U. bei längerem Betrieb das Risiko, dass dir das Ram oder der Flash-Speicher ausgeht, je nachdem wo diese Datei liegt.

Ob ein Programm gestartet wurde, kann man ansonsten auch mit "echo $?" erkennen. Die Ausgabe 0 gibt dabei i.d.R. einen gelungenen Progammstart an.
Wonderdoc
Neugieriger
Neugieriger
Beiträge: 9
Registriert: Mittwoch 7. November 2007, 18:34

Re: Prozess wird beim Beenden von Telnet gekillt

Beitrag von Wonderdoc »

Funktioniert leider nicht.
bei nohup BEFEHL >/dev/null 2>&1 & und anschließendem echo $? kommt immer 0, auch wenn die aufgerufene bin/script garnicht existieren.

mfg
Wonderdoc
MarcM
Foren-Moderator
Beiträge: 1119
Registriert: Sonntag 9. Juni 2002, 13:28

Re: Prozess wird beim Beenden von Telnet gekillt

Beitrag von MarcM »

du suchst screen ! liegt u.a. hier rum....evtl. kriegsts ja zum laufen

ansonsten zeigt dir ps -ax sämtliche Prozesse an die laufen, auch skripte.....ist aber auch schon genannt worden....

Marc
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: Prozess wird beim Beenden von Telnet gekillt

Beitrag von seife »

Screen fehlt wirklich noch auf der dbox. Das wäre wichtiger als die neueste Busybox :-)
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: Prozess wird beim Beenden von Telnet gekillt

Beitrag von Houdini »

screen-4.0.2.tar.gz und https://dev.openwrt.org/browser/package ... format=raw
als screen.diff compiliert zuindest...

Code: Alles auswählen

$(DEPDIR)/screen: bootstrap Archive/screen-4.0.2.tar.gz Patches/screen.diff
	( rm -rf screen-4.0.2 || /bin/true ) && gunzip -cd Archive/screen-4.0.2.tar.gz | TAPE=- tar -x && ( cd screen-4.0.2; patch -p1 < ../Patches/screen.diff )
	cd screen-4.0.2 && \
		$(BUILDENV) \
		./configure \
			--build=$(build) \
			--host=$(target) \
			--prefix= && \
		$(MAKE) all && \
		$(MAKE) install DESTDIR=$(targetprefix)
#	rm -rf screen-4.0.2
#	touch $@
Hagan
Einsteiger
Einsteiger
Beiträge: 198
Registriert: Sonntag 15. Februar 2004, 20:33

Re: Prozess wird beim Beenden von Telnet gekillt

Beitrag von Hagan »

Wonderdoc hat geschrieben:Funktioniert leider nicht.
bei nohup BEFEHL >/dev/null 2>&1 & und anschließendem echo $? kommt immer 0, auch wenn die aufgerufene bin/script garnicht existieren.
Tatsächlich.
Da habe ich wohl die info-Seite von nohup falsch interpretiert:
Exit status:
126 if COMMAND is found but cannot be invoked
127 if `nohup' itself fails or if COMMAND cannot be found
the exit status of COMMAND otherwise
Das klappt wohl nur, wenn der Befehl nicht im Hintergrund gestartet wird, also ohne abschließendes "&" - was natürlich den Sinn von nohup in Frage stellt.