|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Andrey Melnikoff 2:5020/400 22 Aug 2005 20:30:18 To : Slava Astashonok Subject : Re: samba уже подзадолбала -------------------------------------------------------------------------------- Slava Astashonok <sla@0n.ru> wrote: SA> Andrey Melnikoff wrote: >> SA> 5 1001 32175 32173 15 0 6160 1988 - S ? 0:00 sshd: >> SA> sla@ 0 1001 32176 32175 16 0 3200 2016 wait4 Ss pts/1 0:01 >> SA> -bash 0 1001 32195 32176 16 0 2536 912 pause S+ pts/1 0:00 >> SA> screen -rd >> >> Hу и прекрасно. Оно не в ядре, что покажет тебе ps ? SA> Ага, как и sleep из моего примера? См. переписку с E.B.B. Видел. что-то нопонятное в proc. >> Вот-вот. Тебе открыть страшную тайну, что когда у тебя что-то слинкованно с >> libpthread, ld заменяе всякие signal(), sigaction() и всё остальное - >> функциями из libpthread. Функции из libpthread всегда ставят свой >> альтернативный sa_restorer (причем - принудительно, если ты захочешь поиметь >> свой sa_restorer, ты всегда будешь вторым). >> sa_restorer занимается тем, что блокирует все сигналы за исключением SIGKILL >> (его нельзя заблокировать) и SIGRTMIN (он по нему переключает нити). >> Вот тебе и ответ - почему у тебя smbd не киляется кроме как SIGKILL. >> Посылать ему SIGRTMIN - бесполезно. SA> И как это объясняет тот факт, что я не могу пристрелить SIGTERM'ом процесс, SA> находящийся в select(), т.е. обычно могу, а иногда не могу? Если SA> процесс/библиотека явно блокирует сигналы - понятно, но вот в этом объяснии SA> о libpthread рациональное зерно где? Тут. Обработчик (sa_restorer) как-то интересно написан, что при некоемом стечении обстоятельств он вообще всё игнорирует. Я сейчас кусок strace найти не могу чтоб показать. >> Давай выхлоп от strace. SA> Hу, вот снова поймал: что-то приключилось (точнее в этом и есть проблема - SA> что-то приключается) с соединением с ldap-сервером. Именно в select() висел SA> процесс и не реагировал на SIGTERM. Жаль маску сигналов снять не успел: зло SA> смотрел на стоящий трейс, а он вдруг таки взял и дальше пошёл... А это есть такое :( Под strace не всегда возможно получить ситуацию. Без strace - гонит, с strace - работает как по маслу. Hарод в LKML бодался по этому поводу. SA> select(1024, [8], [], NULL, NULL) = 1 (in [8]) SA> read(8, "0\202\4\215\2\1\4d", 8) = 8 SA> read(8, "", 1161) = 0 SA> write(8, "0\5\2\1\5B\0", 7) = -1 EPIPE (Broken pipe) SA> shutdown(8, 2 /* send and receive */) = 0 SA> close(8) = 0 SA> time([1124434268]) = 1124434268 SA> getpid() = 14385 SA> rt_sigaction(SIGPIPE, {0x2dbe07a0, [], SA_RESTORER, 0x2da4f6f8}, {SIG_IGN}, SA> 8) = 0 Ага. Следующий раз strace + посылка сигнала -PIPE. Только strace цеплять до того, как начнешь посылать ему сигналы. --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/643804ccf895.html, оценка из 5, голосов 10
|