Re: Co s neKILLnutelnym procesem?
d.petr
d.petr na post.cz
Středa Listopad 30 14:33:56 CET 2011
> ------------ Původní zpráva ------------
> Od: Pavel Kankovsky <peak na argo.troja.mff.cuni.cz>
> ----------------------------------------
> On Wed, 30 Nov 2011, d.petr wrote:
>
> > Je tam "oki_release" (bez uvozovek). Napadá mě spojitost s CANovským
> > řadičem OKI, který v zařízení pracuje.
>
> A ejhle! A není to náhodou tak, že fd pro to CAN/OKI má menší číslo než fd
> pro UDP, čili když se zavěsí v zavírání toho prvního, tak se nikdy
> nedostane k uzavření toho druhého?
Vy mi sem koukáte? :-) Ano, podle očíslování je CAN před socketem.
> > /proc/PID/fd je prázdný.
>
> To znamená, že už se dostal do exit_files(). Ale dost možná tam stále je,
> protože on nejdřív ty otevřené soubory odpojí od procesu, a pak je
> pouzavírá.
>
> Pokud něco pořád sedí na tom UDP portu (co netstat?), tak je celkem jasné,
> že nepůjde, aby se tam posadil někdo další.
Ano, podle netstat zůstává otevřen ten port UDP (a hromadí se příchozí pakety).
> To, že by se dle hypotézy zaseklo zavírání CAN, sice moc nesedí s tím, že
> by se to dalo znovu otevřít, ale Cthulhu ví, co se tam děje.
Napadá mě, nejsou soubory standardně sdílené? Pak by třeba šel /dev/can otevřít znovu, i kdyby se před tím nezavřel. Ale netuším, co by se pak dál dělo uvnitř jádra.
Toho pána neznám. Ale jestli ví všechno, že bych se ho zeptal? :-)
> Např. můžete ověřit, zda tam skutečně podstatnou roli hraje ten CAN.
Vynechal jsem celý CAN, navodil stejnou chybu a ... Segmentation fault a program byl normálně odstřelen. Celý a v pořádku. Že by tedy opravdu to pořadí fd?
> > To to je výpis pro hlavní vlákno:
> > //// tento blok se v pomalých intervalech stále opakuje
> > nanosleep({10, 0}, {10, 0}) = 0
> > rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
> > rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0
> > rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
> > //// a na konci je
> > nanosleep({10, 0}, {10, 0}) = 0
> > rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
> > rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0
> > rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
> > nanosleep({10, 0}, 0xbe9cfbf0) = ? ERESTART_RESTARTBLOCK (To be
> restarted)
>
> A nic dalšího tam už není ani po segfaultu?
Nic dalšího. Výpis Segmentation fault ani nedostanu, program se prostě naráz přestane jakkoliv projevovat.
PM
Další informace o konferenci Linux