KDE-Absturz bei Internet-Zugang
Liewe Leid, Ich hab seit gestern ein merkwürdiges Problem: Wenn ich mit dem Internet-Browser ins Internet gehe (egal ob mit Mozilla oder Konquerer) verabschiedet sich KDE und ich lande im Anmelde-Bildschirm. Es passiert nicht immer. Weil ich zunächst den Mozilla verdächtigt hatte, habe ich den Mozilla 1.7 wieder gelöscht und den Mozilla von der SUSE CD wieder installiert. Zunächst schien es dann auch zu gehen, aber dann trat das Problem wieder auf. Ich habe SUSE 9.1 Prof. mfg Bernd Merling 68199 Mannheim http://www.merling.net ICQ: 315528581
Am Montag, 30. August 2004 20:55 schrieb Bernd Merling:
Liewe Leid,
Ich hab seit gestern ein merkwürdiges Problem:
Wenn ich mit dem Internet-Browser ins Internet gehe (egal ob mit Mozilla oder Konquerer) verabschiedet sich KDE und ich lande im Anmelde-Bildschirm. Es passiert nicht immer.
Weil ich zunächst den Mozilla verdächtigt hatte, habe ich den Mozilla 1.7 wieder gelöscht und den Mozilla von der SUSE CD wieder installiert. Zunächst schien es dann auch zu gehen, aber dann trat das Problem wieder auf.
Ich habe SUSE 9.1 Prof.
mfg Bernd Merling 68199 Mannheim http://www.merling.net ICQ: 315528581
Ich habe noch einige Ergänzungen. Offenbar hat das Prob was mit Java zu tun. Wenn ich in Mozilla Javascript abschalte stürzt KDE nicht ab. Andererseits stürzt es auch ab, wenn ich z.B. versuche auf den Router zuzugreifen, der auch mit Java-Applets arbeitet. Eine Neuinstallation der Java-Komponenten mit Yast hat aber ebenso wenig weiter geholfen, wie die Installation von KDE. Ich bitte dringend um Hilfe. -- mfg Bernd Merling 68199 Mannheim http://www.merling.net ICQ: 315528581
Bernd Merling wrote: [Tuesday 31 August 2004 00:15]
Offenbar hat das Prob was mit Java zu tun. Wenn ich in Mozilla Javascript abschalte stürzt KDE nicht ab. Andererseits stürzt es auch ab, wenn ich z.B. versuche auf den Router zuzugreifen, der auch mit Java-Applets arbeitet. Eine Neuinstallation der Java-Komponenten mit Yast hat aber ebenso wenig weiter geholfen, wie die Installation von KDE.
Neuinstallationen werden in den seltensten Fällen etwas nützen. Wenn du nach dem Absturz zur Login-Maske kommst, dann ist anscheinend der X-Server abgestürzt - das ist recht drastisch. Vielleicht ist der Videotreiber buggy? Ich würde versuchen herauszufinden, was die Applikation direkt vor dem Absturz tut. Starte z.B. mozilla mit strace und logge die Systemcalls in ein File: strace mozilla >logfile 2>&1 Vielleicht siehst du direkt vor dem Ende des Logfiles irgend etwas interessantes. Thomas.
Am Dienstag, 31. August 2004 00:58 schrieb Thomas Hofer:
Ich würde versuchen herauszufinden, was die Applikation direkt vor dem Absturz tut. Starte z.B. mozilla mit strace und logge die Systemcalls in ein File:
strace mozilla >logfile 2>&1
Vielleicht siehst du direkt vor dem Ende des Logfiles irgend etwas interessantes.
Thomas.
Okay hab ich gemacht.
Leider kann ich mit diesen Zahlenkolonnen nix anfangen. Die letzten
Zeilen ab der Stelle, an der ich die URL eingegeben hab, sehen so aus:
Kann mir irgendjemand sagen, was das bedeutet und ob man damit was
anfangen kann?
write(44, "\0\372\0\5\0\0\0\0\0000http://www.sparkasse-r"..., 58) = 58
write(44, "\0\372\0\21\0\0\0\0", 8) = 8
write(3, "\n\21\2\0)\3\340\3\n\0\2\0*\3\340\3\4\4\2\0*\3\340\3\4"...,
644) = 644
read(3, "\22\0\2\')\3\340\3)\3\340\3\0\252\314\10)\3\340\3\0\0\0"...,
32) = 32
read(3, "\f\0\2\'(\3\340\3\0\0\0\0\304\3\313\2\0\0\275\0\0\0\302"...,
32) = 32
read(3, "\22\0\3\'*\3\340\3*\3\340\3\0\252\314\10*\3\340\3\0\0\0"...,
32) = 32
read(3, "\21\214\4\'*\3\340\3*\3\340\3\17\202\r\10\0\350\315\10"..., 32)
= 32
read(3, "\21\214\5\')\3\340\3)\3\340\3 5\30@\320+\30@ 5\30@\370"..., 32)
= 32
read(3, "\22\270\6\'\'\3\340\3\'\3\340\3\0\252\314\10\'\3\340\3"..., 32)
= 32
read(3, "\f\214\6\'\310\2\340\3\0\0\0\0\304\3\313\2\0\0\275\0\260"...,
32) = 32
read(3, "\22\270\7\'(\3\340\3(\3\340\3\0\252\314\10(\3\340\3\0\0"...,
32) = 32
read(3, "\21\214\10\'(\3\340\3(\3\340\3\17\202\r\10\340\333\320"..., 32)
= 32
read(3, "\21\214\t\'\'\3\340\3\'\3\340\3 5\30@\320+\30@ 5\30@\370"...,
32) = 32
read(3, "\23\0\r\'\374\3\340\3\374\3\340\3\0-\f\10\0\0\0\0\25f\35"...,
32) = 32
read(3, "\23\0\21\'\373\3\340\3\373\3\340\3\0-\f\10\0\0\0\0\25f"..., 32)
= 32
read(3, "\17\252\21\'\374\3\340\3\0\320\301\10\34\\\16\0108\16\275"...,
32) = 32
read(3, "\17\0\21\'\376\3\340\3\0\0\0\0\0\0\0\0\0\0\275\0\0\0\267"...,
32) = 32
read(3, "\f\206\21\'\376\3\340\3\0\0\0\0\304\3\313\2\0\0\275\0 "..., 32)
= 32
read(3, "\26\316\32\'\6\4\340\3\6\4\340\3\0\0\0\0\0\0\0\0\10\2\23"...,
32) = 32
read(3, "\26\316\33\'\5\4\340\3\5\4\340\3\0\0\0\0\0\0\0\0\10\2\23"...,
32) = 32
read(3, "\23\0\37\'\6\4\340\3\6\4\340\3\0-\f\10\0\0\0\0\25f\35\2"...,
32) = 32
read(3, "\23\0#\'\5\4\340\3\5\4\340\3\0-\f\10\0\0\0\0\25f\35\2\0"...,
32) = 32
read(3, "\17\4#\'\6\4\340\3\0\0\0\0\340\333\320\0100\333\275\0\300"...,
32) = 32
read(3, "\f\333#\'\6\4\340\3\0\0\0\0\10\2\23\0\0\0\0\0\0\0\0\0\0"...,
32) = 32
read(3, "\22\0$\'\5\4\340\3\5\4\340\3\0-\f\10\0\0\0\0\25f\35\2\0"...,
32) = 32
read(3, "\f\350$\'\376\3\340\3\0\0\0\0\10\2\23\0\0\0\320\10 \350"...,
32) = 32
read(3, "\22\0%\'\6\4\340\3\6\4\340\3\0\252\314\10\6\4\340\3\0\0"...,
32) = 32
read(3, "\26\366&\'\5\4\340\3\5\4\340\3\0\0\0\0<\0009\0\10\2\23"..., 32)
= 32
read(3, "\23\0*\'\6\4\340\3\6\4\340\3\0-\f\10\0\0\0\0\25f\35\2\0"...,
32) = 32
read(3, "\23\0.\'\5\4\340\3\5\4\340\3\0-\f\10\0\0\0\0\25f\35\2\0"...,
32) = 32
read(3, "\17\252.\'\6\4\340\3\0\364\377\277qc\22\10\250\252\371"..., 32)
= 32
read(3, "\f\333.\'\6\4\340\3\0\0\0\0\10\2\23\0\0\0\2\0\0\350\315"...,
32) = 32
read(3, "\1\0/\'\3\0\0\0#\0\0\0\1\0\1\1\377\377\377\377\0\0\0\0"..., 32)
= 32
read(3, "|\200C\0|\200C\0\0\0\301\10", 12) = 12
read(3, "\1\0200\'\0\0\0\0_\0\0\0\0\0\0\0\10\2\23\0\0\0\0\0\20\320"...,
32) = 32
write(3, "\2\21\4\0\6\4\340\3\0\10\0\0|\200K\0+\4\1\0", 20) = 20
read(3, "\1\0022\'\0\0\0\0_\0\340\3\0\0\0\0\0\0\0\0\1\0\0\0\20\320"...,
32) = 32
write(3, "+\21\1\0", 4) = 4
read(3, "\1\0023\'\0\0\0\0_\0\340\3\0\0\0\0\1\0\0\0\1\0\0\0\20\320"...,
32) = 32
write(44, "\0\372\0\3\0\0\0\0\3\340\4\6\0\0\2\10\0\0\0\23\0\0\0\0"...,
28) = 28
read(44,
Bernd Merling wrote: [Tuesday 31 August 2004 10:10]
Am Dienstag, 31. August 2004 00:58 schrieb Thomas Hofer:
Ich würde versuchen herauszufinden, was die Applikation direkt vor dem Absturz tut. Starte z.B. mozilla mit strace und logge die Systemcalls in ein File:
strace mozilla >logfile 2>&1
Vielleicht siehst du direkt vor dem Ende des Logfiles irgend etwas interessantes.
Thomas.
Okay hab ich gemacht. Leider kann ich mit diesen Zahlenkolonnen nix anfangen. Die letzten Zeilen ab der Stelle, an der ich die URL eingegeben hab, sehen so aus:
Kann mir irgendjemand sagen, was das bedeutet und ob man damit was anfangen kann?
Die Stelle, die du geschickt hast, ist nicht besonders aussagekräftig. Da werden nur ein paar Files gelesen und geschrieben. Ist das die Stelle direkt vor dem Absturz? Wenn ja, dann glaube ich, daß das Problem eher bei einem anderen Prozess zu suchen ist (ich bin ratlos). Die erste Zahl bei den read und write Aufrufen ist der Filedeskriptor. Um herauszufinden, welches File da gelesen oder geschrieben wird, mußt du rückwärts im Logfile nach einem open Kommando suchen, das als Returnwert genau diese Zahl zurückliefert. Das sieht dann z.B. so aus: open("/lib/libpthread.so.0", O_RDONLY) = 3 Dann weißt du, daß Filedeskriptor 3 das File "/lib/libpthread.so.0" ist. Wird bei open ein -1 zurückgegeben, dann ist das open gescheitert. Vielleicht siehst du mal nach, auf welches File zuletzt zugegriffen wurde (Filedeskriptor 44). Thomas.
Am Dienstag, 31. August 2004 11:45 schrieb Thomas Hofer:
Die Stelle, die du geschickt hast, ist nicht besonders aussagekräftig. Da werden nur ein paar Files gelesen und geschrieben. Ist das die Stelle direkt vor dem Absturz? Wenn ja, dann glaube ich, daß das Problem eher bei einem anderen Prozess zu suchen ist (ich bin ratlos).
Ja, das sind die letzten Zeilen.
Die erste Zahl bei den read und write Aufrufen ist der Filedeskriptor. Um herauszufinden, welches File da gelesen oder geschrieben wird, mußt du rückwärts im Logfile nach einem open Kommando suchen, das als Returnwert genau diese Zahl zurückliefert. Das sieht dann z.B. so aus:
hab ich probiert.
Ich hab die ganze Datei durchsucht. Die 44 taucht als Rückgabewert ( =
44 ) am Ende einer open .... - Zeile überhaupt nicht auf. Der höchste
Rückgabewert, war so bei 22 oder so). Meistens werden die geöffneten
Files gleich wieder geschlossen.
Die 44 taucht ein paar mal am Ende von "Write" - Zeilen auf. z.B.:
---------------
close(3) = 0
uname({sys="Linux", node="Multimedia", ...}) = 0
socket(PF_UNIX, SOCK_STREAM, 0) = 3
....... (viele andere Zeilen).....
write(3, "\224\1\4\0\0\1\7\0\0\0\7\0\377\0\377\0\224\25\7\0\0\1\0"...,
44) = 44
-----------
oder viel weiter unten:
---------
write(8, "/usr/lib/browser-plugins/mozplug"..., 44) = 44
.....wieder ein paar andere Zeilen im gleichen Stil .....
write(8, "42:audio/x-wav: Microsoft wave f"..., 42) = 42
write(8, "43:image/sun-raster: SUN raster "..., 44) = 44
write(8, "44:image/x-sun-raster: SUN raste"..., 46) = 46
write(8, "45:image/x-rgb: RGB Image: rgb:$"..., 33) = 33
write(8, "46:image/x-portable-pixmap: PPM "..., 45) = 45
write(8, "47:image/x-portable-graymap: PGM"..., 46) = 46
write(8, "48:image/x-portable-bitmap: PBM "..., 45) = 45
write(8, "49:image/x-portable-anymap: PBM "..., 45) = 45
write(8, "50:image/tiff: TIFF image: tiff,"..., 38) = 38
write(8, "51:image/x-tiff: TIFF image: tif"..., 40) = 40
write(8, "52:application/x-dvi: DVI file: "..., 38) = 38
write(8, "53:application/x-rtf: Rich Text "..., 46) = 46
write(8, "54:application/rtf: Rich Text Fo"..., 44) = 44
write(8, "55:text/rtf: Rich Text Format: r"..., 37) = 37
------------
Ein paar -1 - Rückmeldungen hab ich auch gefunden. Aber es scheint wohl
so zu sein, dass das Programm verschiedene Verzeichnisse durchsucht,
bis er die betreffende Datei gefunden hat. Also meistens sieht das so
aus, dass mehrere Open .... = -1 kommen und dann am Ende kommt dann ein
Open .... = 8 oder so.
Hier aber, scheint es die Datei nicht gefunden zu haben.
Im nachfolgenden Block (fcntl....) taucht dann auch die 44 auf.
Vielleicht brauchts da vorher kein open?
Ich hab halt keine Ahnung, ob das was zu bedeuten hat und was fcntl
bedeutet.
open("/home/bememabel/.java/deployment/deployment.properties", O_RDONLY)
= -1 ENOENT (No such file or directory)
socket(PF_UNIX, SOCK_STREAM, 0) = 41
fcntl64(41, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(41, F_SETFL, O_RDWR|O_NONBLOCK) = 0
unlink("/tmp/jpsock.142_03.7522") = -1 ENOENT (No such file or
directory)
bind(41, {sa_family=AF_UNIX, path="/tmp/jpsock.142_03.7522"}, 106) = 0
listen(41, 3) = 0
socketpair(PF_UNIX, SOCK_STREAM, 0, [42, 43]) = 0
fcntl64(42, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(42, F_SETFL, O_RDWR|O_NONBLOCK) = 0
fcntl64(43, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(43, F_SETFL, O_RDWR|O_NONBLOCK) = 0
socketpair(PF_UNIX, SOCK_STREAM, 0, [44, 45]) = 0
--------> fcntl64(44, F_GETFL) = 0x2 (flags O_RDWR)
-------->fcntl64(44, F_SETFL, O_RDWR|O_NONBLOCK) = 0
fcntl64(45, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(45, F_SETFL, O_RDWR|O_NONBLOCK) = 0
socketpair(PF_UNIX, SOCK_STREAM, 0, [46, 47]) = 0
fcntl64(46, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(46, F_SETFL, O_RDWR|O_NONBLOCK) = 0
fcntl64(47, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(47, F_SETFL, O_RDWR|O_NONBLOCK) = 0
socketpair(PF_UNIX, SOCK_STREAM, 0, [48, 49]) = 0
fcntl64(48, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(48, F_SETFL, O_RDWR|O_NONBLOCK) = 0
fcntl64(49, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(49, F_SETFL, O_RDWR|O_NONBLOCK) = 0
fcntl64(47, F_GETFL) = 0x802 (flags O_RDWR|
O_NONBLOCK)
fcntl64(47, F_SETFL, O_RDWR) = 0
fcntl64(45, F_GETFL) = 0x802 (flags O_RDWR|
O_NONBLOCK)
fcntl64(45, F_SETFL, O_RDWR) = 0
fcntl64(43, F_GETFL) = 0x802 (flags O_RDWR|
O_NONBLOCK)
fcntl64(43, F_SETFL, O_RDWR) = 0
fcntl64(49, F_GETFL) = 0x802 (flags O_RDWR|
O_NONBLOCK)
fcntl64(49, F_SETFL, O_RDWR) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|
SIGCHLD, child_tidptr=0x408e1168) = 7562
futex(0x406e79d0, FUTEX_WAKE, 1) = 1
close(45) = 0
close(43) = 0
close(47) = 0
close(49) = 0
recv(44, 0x89d3e30, 1, 0) = -1 EAGAIN (Resource
temporarily unavailable)
---->poll([{fd=44, events=POLLIN|POLLPRI, revents=POLLIN}], 1, 5000) = 1
----->recv(44, "\21", 1, 0) = 1
----->fcntl64(44, F_GETFL) = 0x802 (flags O_RDWR|
O_NONBLOCK)
----->fcntl64(44, F_SETFL, O_RDWR) = 0
----->fcntl64(44, F_GETFL) = 0x2 (flags O_RDWR)
mmap2(NULL, 2101248, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|
MAP_ANONYMOUS, -1, 0) = 0x42b45000
mprotect(0x42b45000, 4096, PROT_NONE) = 0
sched_get_priority_min(SCHED_OTHER) = 0
sched_get_priority_max(SCHED_OTHER) = 0
clone(child_stack=0x42d45b08, flags=CLONE_VM|CLONE_FS|CLONE_FILES|
CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|
CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x42d45bf8,
{entry_number:6, base_addr:0x42d45bb0, limit:1048575, seg_32bit:1,
contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0,
useable:1}, child_tidptr=0x42d45bf8) = 7576
sched_setscheduler(7576, SCHED_OTHER, { 0 }) = 0
mmap2(NULL, 2101248, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|
MAP_ANONYMOUS, -1, 0) = 0x42d46000
mprotect(0x42d46000, 4096, PROT_NONE) = 0
sched_get_priority_min(SCHED_OTHER) = 0
sched_get_priority_max(SCHED_OTHER) = 0
clone(child_stack=0x42f46b08, flags=CLONE_VM|CLONE_FS|CLONE_FILES|
CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|
CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x42f46bf8,
{entry_number:6, base_addr:0x42f46bb0, limit:1048575, seg_32bit:1,
contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0,
useable:1}, child_tidptr=0x42f46bf8) = 7577
sched_setscheduler(7577, SCHED_OTHER, { 0 }) = 0
------->write(44, "\0\372\0\23", 4) = 4
------->send(44, "\35b\0\0", 4, 0) = 4
accept(41, {sa_family=AF_UNIX, path="> @�X @�$ @"}, [2]) = 43
fcntl64(43, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(43, F_SETFL, O_RDWR|O_NONBLOCK) = 0
recv(43, "\272\23\0\0", 4, 0) = 4
send(43, "\273\23\0\0", 4, 0) = 4
fcntl64(43, F_GETFL) = 0x802 (flags O_RDWR|
O_NONBLOCK)
fcntl64(43, F_SETFL, O_RDWR) = 0
fcntl64(43, F_GETFL) = 0x2 (flags O_RDWR)
send(43, " \0\0\0\6\0\0\0\20\0java/lang/System\0\0\310B\227\10"..., 36,
0) = 36
poll([{fd=43, events=POLLRDNORM, revents=POLLRDNORM}, {fd=42,
events=POLLRDNORM}], 2, -1) = 1
recv(43, "\0\0\0\20", 4, 0) = 4
poll([{fd=43, events=POLLRDNORM, revents=POLLRDNORM}, {fd=42,
events=POLLRDNORM}], 2, -1) = 1
recv(43, "\214\241 \10", 4, 0) = 4
send(43, " \0\0\0\21\0\0\0\20\0java/lang/System\0\0\310B\227\10"..., 36,
0) = 36
poll([{fd=43, events=POLLRDNORM, revents=POLLRDNORM}, {fd=42,
events=POLLRDNORM}], 2, -1) = 1
recv(43, "\0\0\0\20", 4, 0) = 4
send(43, " \0\0\0\17\0\0\0\20\0java/lang/System\0\0\310B\227\10"..., 36,
0) = 36
poll([{fd=43, events=POLLRDNORM, revents=POLLRDNORM}, {fd=42,
events=POLLRDNORM}], 2, -1) = 1
recv(43, "\0\0\0\0\33\4\0\0", 8, 0) = 8
send(43, " \0\0\0\6\0\0\0\20\0java/lang/System\0\0\310B\227\10"..., 36,
0) = 36
poll([{fd=43, events=POLLRDNORM, revents=POLLRDNORM}, {fd=42,
events=POLLRDNORM}], 2, -1) = 1
recv(43, "\0\0\0\20", 4, 0) = 4
poll([{fd=43, events=POLLRDNORM, revents=POLLRDNORM}, {fd=42,
events=POLLRDNORM}], 2, -1) = 1
recv(43, "\220\241 \10", 4, 0) = 4
send(43, " \0\0\0\21\0\0\0\20\0java/lang/System\0\0\310B\227\10"..., 36,
0) = 36
poll([{fd=43, events=POLLRDNORM, revents=POLLRDNORM}, {fd=42,
events=POLLRDNORM}], 2, -1) = 1
recv(43, "\0\0\0\20", 4, 0) = 4
send(43, " \0\0\0\17\0\0\0\20\0java/lang/System\0\0\310B\227\10"..., 36,
0) = 36
poll([{fd=43, events=POLLRDNORM, revents=POLLRDNORM}, {fd=42,
events=POLLRDNORM}], 2, -1) = 1
recv(43, "\0\0\0\0\33\4\0\0", 8, 0) = 8
------------> write(44,
"\0\372\0\1\0\0\0\0\0\0\0\0\0\0\0\20\0\10codebase\0\23j"..., 401) = 401
------------> read(44, "\0\373\0\1", 4) = 4
------------> write(44,
"\0\372\0\5\0\0\0\0\0000http://www.sparkasse-r"..., 58) = 58
---------->write(44, "\0\372\0\21\0\0\0\0", 8) = 8
........
write(44, "\0\372\0\3\0\0\0\0\3\340\4\6\0\0\2\10\0\0\0\23\0\0\0\0"...,
28) = 28
read(44,
Bernd Merling wrote: [Tuesday 31 August 2004 13:42]
Die erste Zahl bei den read und write Aufrufen ist der Filedeskriptor. Um herauszufinden, welches File da gelesen oder geschrieben wird, mußt du rückwärts im Logfile nach einem open Kommando suchen, das als Returnwert genau diese Zahl zurückliefert. Das sieht dann z.B. so aus:
hab ich probiert. Ich hab die ganze Datei durchsucht. Die 44 taucht als Rückgabewert ( = 44 ) am Ende einer open .... - Zeile überhaupt nicht auf. Der höchste Rückgabewert, war so bei 22 oder so). Meistens werden die geöffneten Files gleich wieder geschlossen.
Aha. Open ist nur die einfachste von vielen Möglichkeiten, wie ein Filedeskriptor entstehen kann. Eine andere Möglichkeit ist z.B. ein dup call - dabei wird ein anderer Filedeskriptor "dupliziert". Mit diesem anderen Filedeskriptor müßte man sich dann weiter "hanteln". Ich kann dir zirka sagen, was in dem Log-Fragment abläuft, aber es ist nicht ganz simpel (und es wird wohl auch nicht wirklich weiterhelfen, fürchte ich): Der Deskriptor kommt aus diesem Call: socketpair(PF_UNIX, SOCK_STREAM, 0, [44, 45]) = 0 Dabei wird ein Paar von (Unix-Domain) Sockets erzeugt - das ist ein Mechanismus über den zwei separate Prozesse mit einander kommunizieren können (über TCP/IP oder mit effizienteren Methoden, falls die Kommunikation rein lokal abläuft). Jedem der zwei gehört dann jeweils eines der beiden Sockets. Das Socket ist mit einem Filedeskriptor assoziiert, über den mittels der Calls read oder recv und write oder send gelesen und geschrieben werden kann - und das kommt dann am jeweils anderen Ende an. Ein Stück weiter unten teilt sich der Prozess in zwei Prozesse auf: clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID| SIGCHLD, child_tidptr=0x408e1168) = 7562 Jetzt gibt es Mozilla zwei mal (keine Sorge, das ist nur theoretisch so, man braucht dafür nicht plötzlich doppelt so viel Speicher). Der Vater (dem schauen wir gerade auf die Finger) macht nun den Deskriptor 45 zu (mittels close(45)), der Sohn schließt 44 (um die Handlungen der Sub-Prozesse sehen zu können, müßte man weitere Optionen bei strace setzen). Über diese "Nabelschnur" (vielleicht nicht ganz passend angesichts des Geschlechts) können beide mit einander kommunizieren. Kurz gesagt: der Vater sagt zum Sohn "\0\372\0\3\0\0\0\0\3\340\4..." und als er auf die Anwort wartet, trifft ihn der Schlag.
Die 44 taucht ein paar mal am Ende von "Write" - Zeilen auf. z.B.:
Der Rückgabewert von read und write ist nur die Anzahl der geschriebenen Bytes und hat nichts mit dem Filedeskriptor zu tun. Schau mal unter "man 2 write" und "man 2 read". In der Sektion 2 der Manpages findest du auch die Dokumentation für die anderen System-Calls.
Ein paar -1 - Rückmeldungen hab ich auch gefunden. Aber es scheint wohl so zu sein, dass das Programm verschiedene Verzeichnisse durchsucht, bis er die betreffende Datei gefunden hat. Also meistens sieht das so aus, dass mehrere Open .... = -1 kommen und dann am Ende kommt dann ein Open .... = 8 oder so.
Ja, das ist ein normales Verhalten, wenn nach einer Datei gesucht wird. Falls du nicht schon frustriert bist, und dich noch ein wenig mit strace spielen willst, würde ich folgendes vorschlagen: laß das ganze ein paar mal durchlaufen und schau, ob der Fehler immer an der selben Stelle auftritt - könnte ja reiner Zufall sein, daß der Absturz hier auftritt. Zweitens ist es vielleicht der geforkte Sub-Prozess, der das Problem hat. Um die Sub-Prozesse zu verfolgen, ruft man strace mit -f auf. Die erste Zahl in jeder Zeile ist dabei die PID des Prozesses, der den System-Call gemacht hat. Thomas.
Am Dienstag, 31. August 2004 16:57 schrieb Thomas Hofer:
Falls du nicht schon frustriert bist, und dich noch ein wenig mit strace spielen willst, wÌrde ich folgendes vorschlagen: laà das ganze ein paar mal durchlaufen und schau, ob der Fehler immer an der selben Stelle auftritt - könnte ja reiner Zufall sein, daà der Absturz hier auftritt. Zweitens ist es vielleicht der geforkte Sub-Prozess, der das Problem hat. Um die Sub-Prozesse zu verfolgen, ruft man strace mit -f auf. Die erste Zahl in jeder Zeile ist dabei die PID des Prozesses, der den System-Call gemacht hat.
Thomas.
Naja, langsam bin ich ich schon etwas genervt.
Ich weiß auch nicht mehr, was ich glauben soll, woran es liegt. Ich war
heute den ganzen Mittag in ebay und da hat alles einwandfrei
funktioniert. Kann ja wohl nicht sein, dass da kein Java verwendet
wurde.
Wo es immer zuverlässig abstürzt, ist z.B. bei der Sparkasse oder bei
der Router-Einrichtung. Auch bei dem Test-Applet auf der SUN-Site
stürzt es ab.
Mekrwürdig auch: ALs ich vorhin testen wollte, hab ich versehentlich
eine Unterseite der Sparkassen-Site aus der History verwendet. von dort
aus kam ich dann ohne Absturz weiter.
Ich hab jetzt noch zwei Mal geloggt und tatsächlich steigt das System an
verschiedenen Stellen aus. Der dritte Logfile ist doppelt so groß wie
der zweite.
Ich hab im dritten auch die Stelle gefunden, an der das System beim
zweiten Test ausgestiegen ist.
Ich füge hier mal den Teil aus dem dritten Log ein, an dem das System
beim zweiten Log-Test abegestürzt war
[pid 11541] write(3, "<\0\2\0\0\0\240\0+\1\1\0", 12) = 12
[pid 11541] read(3,
"\1\1\'\17\0\0\0\0\7\0`\3\0\0\0\0\0\0\0\0\7\0\0\0H4\300"..., 32) = 32
[pid 11541] shutdown(3, 2 /* send and receive */) = 0
[pid 11541] close(3) = 0
[pid 11541] exit_group(2) = ?
----> Hier ist beim zweiten Log Schluss und so gehts im dritten weiter:
Process 11540 resumed
Process 11541 detached
[pid 11540] <... waitpid resumed> [WIFEXITED(s) && WEXITSTATUS(s) == 2],
0) = 11541
[pid 11540] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 11540] --- SIGCHLD (Child exited) @ 0 (0) ---
[pid 11540] waitpid(-1, 0xbfffdee4, WNOHANG) = -1 ECHILD (No child
processes)
[pid 11540] sigreturn() = ? (mask now [])
[pid 11540] rt_sigaction(SIGINT, {0x8062490, [], 0}, {0x805e136, [], 0},
8) = 0
[pid 11540] rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
[pid 11540] rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
[pid 11540] fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
[pid 11540] mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|
MAP_ANONYMOUS, -1, 0) = 0x40026000
[pid 11540] write(1, "0\n", 2
Mir ist noch etwas aufgefallen: Wenn ich im Kontrollcenter die Schrifteninstallation aufrufe, bekomme ich folgende Fehlermeldung: Fehlermeldung: Bibliotheksdatei libkcm_fontinst.la ist über Ihren PATH nicht auffindbar. Mögliche Ursachen: Bei der letzten Aktualisierung Ihres KDE ist ein Problem aufgetreten und es wurde ein vereinzeltes Kontrollmodul der Vorgängerversion übrig gelassen. Es existieren ältere Module von Programmen, die nicht zum eigentlichen KDE gehören. Die genannte Datei kann ich auch mit Datei suchen nicht finden. Auch wenn ich in Yast-Softwareinstallation nach dieser Datei suche, erhalte ich keine Ergebnisse. -- mfg Bernd Merling 68199 Mannheim http://www.merling.net ICQ: 315528581
participants (2)
-
Bernd Merling
-
Thomas Hofer