On Tue, Apr 15, 2008 at 11:42:36AM +0400, Stanislav Ievlev wrote: > On Tue, Apr 15, 2008 at 02:13:14AM +0400, Evgeny Sinelnikov wrote: > > 2008/4/14 Stanislav Ievlev : > > > On Mon, Apr 14, 2008 at 04:00:38AM +0400, Evgeny Sinelnikov wrote: > > > > > Что касается финального loop_change_fd, то сдаётся мне в свете > > > > > накопившегося опыта стоит попробовать следующее: > > > > > * copy+reexec init'a с tmpfs (тогда точно не будет никаких зависаний ибо > > > > > файл процесса уже будет вне опасности) > > > > > * по окончании работы pivot_root в tmpfs (откуда был запущен) далее kill и umount. > > > > > После второй операции возможно и повторный loop_change_fd не пригодится. > > > > > > > > > > Мы один раз уже пробовали эту схему, но тогда видать не дотумкали насчёт > > > > > ожидания убиения процессов, увидели что не получается отмонтирование и > > > > > отказались от неё. Стоит попробовать ещё разок. > > > > > > > > Да, это интересная идея... Завтра проверю... > > > А я тогда подожду результатов ;) > > > зависание видимо было из-за того что несмотря на статичность файла init, > > > он был загружен при помощи mmap и не вся его часть попала с loop в память. > > > > Что-то оно сегодня не всё успелось... я собрал, но не опробовал > > вариант первичного перенесения init в tmpfs. По итоге стало ясно, что > > вариант переносить init по завершении работы выглядит разумнее... > А по мне так проще в начале, чтобы код менее > ветвистым был. > Так при повторном запуске половину программы придётся пропускать, а иначе только один вызов функции. А я бы сделал reexec после killall. > Кстати вариант с SIGCHILD стал заметно дольше ожидать киляния > процессов ... устанавливал только один раз, ожидание было порядка трёх > секунд, по началу даже подумал что опять зависло. Там sleep(1) > Или надо это ускорять или делать рисование точек интенсивнее. -- ldv