|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Kostik Belousov 2:5020/400 28 Dec 2005 20:02:42 To : Eugene Grosbein Subject : Re: RE -------------------------------------------------------------------------------- Eugene Grosbein <Eugene.Grosbein@f1.n5006.z2.fidonet.org> writes: > 28 дек 2005, среда, в 14:49 KRAST, Kostik Belousov написал(а): > > >>> http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/64198 > >>> Секция How-To-Repeat. > KB>> Ага, я видел. Все-таки - вывод trace или alltrace. > KB>> И здорово было бы соорудить тест, воспроизводящий ядерную > KB>> проблему без init'a. > >> А почему без init'а? > KB> init не убить и не потрассировать. init делает много чего. > > А зачем трассировать init? Логика его в PR описана, исходники есть - > он же просто fork+exec делает, все остальное уже приложение > запущенное и ядро. > > KB> Описанный в PR setup требует перезагрузки на каждое воспроизведение > KB> проблемы. > KB> Кроме того, одно дело запустить exeшник и посмотреть, другое - > KB> править конфиги на (нужной) машине. > > Hу разумеется, это делать надо на небоевой машине. > И необязательно перезагружаться на каждое вопспроизведение - консолей > много, штук 20 можно выделить под отладку, потом только > перезагружаться. 20 воспроизведений это много. > > Eugene Ладно, я не поленился. У тебя в PR анализ правильный, но fix (который на словах) - нет. Тот процесс, который window, не ребенок init'a, и поэтому waitpid в init'е его и не собирает. Про странное состояние RE - скорее всего, проблем(ка) ps. Рассматривание struct proc у зомби stty ничего странного не выявило, структура живет в zombproc, p_state == PRS_ZOMBIE. Попробуй патч: Index: sbin/init/init.c =================================================================== RCS file: /usr/local/arch/ncvs/src/sbin/init/init.c,v retrieving revision 1.61 diff -u -r1.61 init.c - --- sbin/init/init.c 15 Sep 2005 13:16:07 -0000 1.61 +++ sbin/init/init.c 28 Dec 2005 15:56:06 -0000 @@ -1066,6 +1066,7 @@ pid_t pid; sigset_t mask; char term[64], *env[2]; + int status; if ((pid = fork()) == -1) { emergency("can't fork for window system on port %s: %m", @@ -1073,9 +1074,20 @@ /* hope that getty fails and we can try again */ return; } - if (pid) + { + waitpid(-1, &status, 0); return; + } + + /* reparent window process to the init to not make a zombie on exit */ + if ((pid = fork()) == -1) { + emergency("can't fork for window system on port %s: %m", + sp->se_device); + _exit(1); + } + if (pid) + _exit(0); sigemptyset(&mask); sigprocmask(SIG_SETMASK, &mask, (sigset_t *) 0); --- ifmail v.2.15dev5.3 * Origin: The excellent-installed InterNetNews site (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/28756310c26f3.html, оценка из 5, голосов 10
|