Tak, to pytanie zostało zadane wcześniej, ale przeczytanie odpowiedzi nie oświeciło mnie zbyt wiele.XIO: fatalny błąd IO 11
Napisałem program w języku C, który zawiesza się po kilku dniach używania. Ważnym punktem jest to, że NIE generuje pliku core, mimo że wszystko jest ustawione tak, że powinno (core_pattern, ulimit -c unlimited, itd. Mogę wyzwolić core dump fine z kill -SIGQUIT).
Programy szeroko rejestrują, co robi, ale w dzienniku nie ma żadnej wskazówki na temat awarii. Jedyny komunikat wyświetlany w katastrofie (? Lub wcześniej) jest:
XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
after 2322 requests (2322 known processed) with 0 events remaining.
Więc dwa pytania: - Jak to możliwe, aby program mógł upaść (powrót $ = 1?) Bez zrzutu pamięci. - o czym jest ten komunikat o błędzie i co mogę zrobić?
System to RedHat Enterprise 6.4
Edit: udało mi się wymusić zrzutu poprzez wywołanie abort() od wewnątrz 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
Każdy może mnie oświecić jak to Problem X11? libcvi.so nie jest mój, tylko MyCode.c (LabWindows/CVI).
Edycja 2014-12-05: Oto jeszcze dokładniejszy ślad wstecz. Rzeczy zdecydowanie zdarzają się w X11, ale nie jestem programistą X11, więc patrząc na kod źródłowy X z podanego linestell mnie tylko, że serwer X (?) Jest chwilowo niedostępny. Czy istnieje sposób, aby po prostu powiedzieć, aby zignorować ten błąd, jeśli jest to tylko tymczasowe?
#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
Odpowiednie linie:
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 || ...
Twój program może wyciekać z deskryptorów. Po jego uruchomieniu zajrzyj do katalogu '/ proc//fd'; widzisz tam zwiększoną liczbę linków? –
Zwykle trwa kilka dni zanim się zawiesi, ale będę monitorował sytuację. Niektóre badania goszczące prowadzą mnie do przekonania, że jest to problem z wieloma monitorami Xinerama/NVidia, niezwiązany z moją aplikacją. – dargaud
Usunięcie Xineramy nie pomogło. Nadal dostaję te wypadki bez zrzutu pamięci. Jakieś narzędzie, za pomocą którego mogę je wyśledzić? – dargaud