[gelöst] 7270 mit trunk ab r2538

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,787
Punkte für Reaktionen
13
Punkte
38
Hi.
Ich habe gerade auf meiner 7270 das Phänomen gehabt, dass die rc.S nicht beendet wurde.
Code:
/var/mod/root # ps
  PID USER       VSZ STAT COMMAND
    1 root      1192 S    init
    2 root         0 RWN  [ksoftirqd/0]
    3 root         0 SW   [watchdog/0]
    4 root         0 SW<  [events/0]
    5 root         0 SW<  [khelper]
    6 root         0 SW<  [kthread]
   18 root         0 SW<  [kblockd/0]
   32 root         0 SW   [pdflush]
   33 root         0 SW   [pdflush]
   34 root         0 SW<  [kswapd0]
   35 root         0 SW<  [aio/0]
   71 root         0 SW   [pm_info]
   75 root         0 SW<  [CPMAC]
   79 root         0 SW   [mtdblockd]
  101 root         0 SW   [tffsd_mtd_0]
  126 root         0 SW<  [khubd]
  160 root         0 SW<  [scsi_eh_0]
  161 root         0 SW<  [usb-storage]
  [B]512 root      1332 S    /bin/sh /etc/init.d/rc.S[/B]
  526 root         0 SW<  [capi_oslib]
  527 root         0 SW<  [capi_oslib]
  528 root         0 SW   [capitransp]
  534 root         0 SW   [glob_codecs]
  538 root         0 SW   [avm_dect_thread]
  588 root      7372 S N  ctlmgr
  741 ftp        884 S    dnsmasq -p 53
  744 root      2480 S    multid -u
  761 root      5056 S    telefon a127.0.0.1
  768 root      5056 S    telefon a127.0.0.1
  769 root      5056 S    telefon a127.0.0.1
  770 root      5056 S    telefon a127.0.0.1
  772 root      4352 S <  voipd
  776 root      2308 S    pbd
  778 root      2308 S    pbd
  782 root      2228 S    dect_manager
  783 root      2308 S    pbd
  784 root      2308 S    pbd
  785 root      2308 S    pbd
  787 root      1188 S    /usr/sbin/inetd
  798 root       776 S    /bin/run_clock -c /dev/tffs -d
  808 root      7372 S N  ctlmgr
  809 root      7372 S N  ctlmgr
  810 root      7372 S N  ctlmgr
  883 root      1192 S    httpd -P /var/run/webcfg.pid -p 81 -c /mod/etc/httpd.conf -h /usr/mww/ -r Freetz (user:admin)
  896 root      1208 S    syslogd -L -C
  898 root      1192 S    /sbin/klogd -c 4
 1004 root      1192 S    inetd
 1318 root      1152 S    dropbear -p 22
 1613 root      1220 S    -/bin/sh
 4914 root      1192 R    ps
Das könnte mit den Änderungen von r2538 zu tun haben. Falls ihr das auch feststellen könnt, dann schreibt es bitte hier rein.

MfG Oliver
 
Zuletzt bearbeitet:
Da Prozesse wie dropbear und inetd laufen, scheint rc.S schon recht weit zu kommen.

Wenn Du folgendes einfügst, nachdem /var gemountet ist und bevor die Freetz Programme gestartet werden, solltest Du einen Anhaltspunkt bekommen, wieweit die Datei ausgeführt wird. "set -x" hat den gleichen Effekt wie ein Sktipt mit "sh -x" aufzurufen, kann aber an einer beliebigen Stelle in der Datei stehen.
Code:
set -x
exec 2> /var/rc.S.log
 
Die Änderungen aus Ticket #130 sind Schuld an dem Verhalten. Verursacht wird dies durch den rc.S-Schnipsel:
Code:
if [ "`pidof avmlogd`" ]; then
echo STD_PRINTK >/dev/debug
else
echo AVM_PRINTK >/dev/debug
[B]cat /dev/debug &[/B]
fi
MfG Oliver
 
Ich würde darauf tippen, dass dein Prozess 512 von oben, der nach rc.S aussieht, eigentlich dieses "cat /dev/debug" ist. (Unter den geöffneten Filehandles dieses Prozesses bei mir ist auch /dev/debug; stdout und stderr sind /dev/console.)

Wahrscheinlich ist durch das Einsparen des exec-Systemaufrufs die Prozessbeschreibung, die top benutzt, einfach noch die alte.

Andreas
 
Was genau meinst Du mit "Einsparen des exec-Systemaufrufs"?

Ist die Busybox so konfiguriert, daß Programme nicht mit exec gestartet werden, wenn sie in der Busybox enthalten sind? Außerdem spricht auch die niedrige Prozeßnummer dagegen, daß es sich dabei um ein von rc.S gestartetes Programm handelt und nicht rc.S selbst.
 
Die Optimierungen in der Busybox, die wir testweise angeschaltet haben, beruhen darauf, dass beim Aufruf anderer Programme bestimmte Schritte eingespart werden: Wenn normalerweise ein Programm gestartet wird, wird zunächst per fork() vom Betriebssystem eine Kopie des aktuellen Prozesses angelegt, dann in der Kopie durch exec() ein neues ausführbares Image aus dem Dateisystem geladen und das alte überschrieben. Da die busybox viele der Programme, die benutzt werden, aber selbst in ihrem Image enthält, kann man (falls man aufpasst, dass sich die Teile "rücksichtsvoll" verhalten) z.B. das exec() einsparen und einfach einen Funktionsaufruf im aktuellen Prozess machen. Wenn man eh auf den Kind-Prozess warten muss, kann man unter Umständen (wenn sich das Kind noch besser benimmt; die einzelnen Busybox-Applets sind entsprechend markiert) sogar das fork() weglassen.

Noch technischer ist das ganze hier dokumentiert: http://www.busybox.net/cgi-bin/viewcvs.cgi/trunk/busybox/docs/nofork_noexec.txt?view=markup

Gruß,
Andreas

PS: Ich glaube, dass es für die Busybox möglich wäre, den Prozessnamen/die Kommandozeile, die von top/ps benutzt werden, im laufenden Prozess anzupassen. Das müsste unter Linux gehen, ist aber ansonsten höchst betriebssystemabhängig (vielleicht ein Grund, warum es nicht gemacht wird).
 
Wenn ich diese Zeile richtig verstehe, dann ist ein cat /dev/debug & also eigentlich nicht angedacht.
* All allocated data, opened files, signal handlers, termios settings, O_NONBLOCK flags etc should be freed/closed/restored prior to return.
MfG Oliver
 
Da die busybox viele der Programme, die benutzt werden, aber selbst in ihrem Image enthält, kann man das exec() einsparen und einfach einen Funktionsaufruf im aktuellen Prozess machen.
Das nennt sich CONFIG_FEATURE_PREFER_APPLETS und ist bei mir nicht aktiviert, und ich kann mich nicht erinnern, es von Default-Wert umgestellt zu haben. Deswegen ja die Frage, ob die Busybox inzwischen anders konfiguriert ist.

Wenn man eh auf den Kind-Prozess warten muss, kann man unter Umständen sogar das fork() weglassen.

Wie Du richtig schreibst, funktioniert das aber nicht, wenn ein Programm asynchron aufgerufen wird, wie in diesem Fall.
 
Diese Geschichte wird mit einem Patch in Ticket #130 aktiviert. Das habe ich oben schonmal geschrieben.

MfG Oliver
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.