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