XIO: fatal IO error 11

Ja, diese Frage wurde vorher gefragt, aber das Lesen der Antworten nicht erleuchte mich viel.

Schrieb ich ein C-Programm, das stürzt nach ein paar Tagen der Anwendung. Ein wichtiger Punkt ist, dass es erzeugt NICHT eine core-Datei, obwohl alles so eingerichtet ist, dass es sollte (core_pattern platziert wird, ulimit -c unlimited, etc. Ich kann es auslösen, ein core-dump in Ordnung mit kill -SIGQUIT).

Programme ausführlich protokolliert, was es tut, aber es gibt keinen Hinweis auf den Absturz in der log.
Die einzige Nachricht angezeigt, die auf den crash (oder vor?) ist:

XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
  after 2322 requests (2322 known processed) with 0 events remaining.

Also zwei Fragen:
- wie ist es möglich, ein Programm zum Absturz zu bringen (return $?=1) ohne core-dump.
- was ist diese Fehler Meldung und was kann ich tun ?

System ist RedHat Enterprise 6.4

Bearbeiten:
Ich konnte die Kraft eines core-dump durch Aufruf von abort() von innen ein atexit() callback:

(gdb) bt
#0  0x00bc8424 in __kernel_vsyscall ()
#1  0x0085a861 in raise () from /lib/libc.so.6
#2  0x0085c13a in abort () from /lib/libc.so.6
#3  0x0808f5cf in Unexpected () at MyCode.c:1378
#4  0x0085de9f in exit () from /lib/libc.so.6
#5  0x00c85701 in _XDefaultIOError () from /usr/lib/libX11.so.6
#6  0x00c85797 in _XIOError () from /usr/lib/libX11.so.6
#7  0x00c84055 in _XReply () from /usr/lib/libX11.so.6
#8  0x00c68b8f in XGetImage () from /usr/lib/libX11.so.6
#9  0x004fd6a7 in ?? () from /usr/local/lib/libcvi.so
#10 0x00478ad5 in ?? () from /usr/local/lib/libcvi.so
...
#29 0x001eed9d in ?? () from /usr/local/lib/libcvi.so
#30 0x001eee41 in RunUserInterface () from /usr/local/lib/libcvi.so
#31 0x0808fab4 in main (argc=2, argv=0xbfbdc984) at MyCode.c:1540

Jemand mich aufklären kann was das X11-problem ? libcvi.also meins ist das nicht, nur MyCode.c (LabWindows/CVI).

Bearbeiten 2014-12-05:
Hier ist eine noch genauere backtrace. Die Dinge definitiv geschehen, X11, aber ich bin kein X11-Programmierer, so Sie sich den Quellcode für X aus der linestell mich nur, dass der X-server (?) ist vorübergehend nicht verfügbar. Gibt es eine Möglichkeit einfach zu sagen, es zu ignorieren diesen Fehler, wenn es nur temporär ist ?

#4  0x00965eaf in __run_exit_handlers (status=1) at exit.c:78
#5  exit (status=1) at exit.c:100
#6  0x00c356b1 in _XDefaultIOError (dpy=0x88aeb80) at XlibInt.c:1292
#7  0x00c35747 in _XIOError (dpy=0x88aeb80) at XlibInt.c:1498
#8  0x00c340a6 in _XReply (dpy=0x88aeb80, rep=0xbf82fa90, extra=0, discard=0) at xcb_io.c:708
#9  0x00c18c0f in XGetImage (dpy=0x88aeb80, d=27263845, x=0, y=0, width=60, height=20, plane_mask=4294967295, format=2) at GetImage.c:75
#10 0x005f46a7 in ?? () from /usr/local/lib/libcvi.so

Entsprechenden Zeilen:

XlibInt.c: _XDefaultIOError()
1292:   exit(1);

XlibInt.c: _XIOError
1498:   _XDefaultIOError(dpy);

xcb_io.c: _XReply()
708:    if(!reply) _XIOError(dpy);

GetImage.c: XGetImage()
74: if (_XReply (dpy, (xReply *) &rep, 0, xFalse) == 0 || ...
Ihr Programm kann Lecks Deskriptoren. Schauen Sie in seine /proc/<pid>/fd Verzeichnis, nachdem es schon einige Zeit; Sie sehen, eine erhöhte Anzahl von links gibt es?
Normalerweise dauert es mehrere Tage, bevor es abstürzt, aber ich werde die überwachung der situation. Einige googeln führt mich zu glauben, dass es eine Xinerama/NVidia multi-monitor-problem nichts mit meiner app.
Entfernen Xinerama nicht helfen. Ich bekomme immer noch diese Abstürze ohne core-dump. Alle tool die ich verwenden kann, um es aufzuspüren ?
Beachten Sie, dass core-dumps sind in der Standardeinstellung deaktiviert. Sie müssten, um es zu aktivieren, indem z.B. ausgeführt ulimit -c unlimited in der gleichen shell aus starten Sie die Anwendung aus (oder tun Sie es programmgesteuert aus der Anwendung mit setrlimit(RLIMIT_CORE, ... ) - Aufruf)
Ja, ich weiß, über ulimit, aber das hilft nicht. Es scheint, das Programm wird über einen Aufruf von exit(0) in einigen Bibliothek. Ich habe gerade herausgefunden, dass ich es fangen kannst, die mit atexit(). Ich legte einen Aufruf von abort() drinnen und jetzt warte ich auf es zu beenden wieder (dauert ein paar Tage).

InformationsquelleAutor dargaud | 2014-09-11

Schreibe einen Kommentar