>Способ классический. Правда, как и следовало ожидать,
>без возможности дождаться завершения процесса.
>
>В своё время я долго пыжился, пытаясь изготовить оный
>"waitpid() для недочернего процесса". Увы, приближения
>получаются в лучшем случае посредственные. Типа приведённого
>выше кода цикле и совместно с nanosleep(). В итоге пришёл
>к выводу, что сделать 'совсем хорошо' не дают ограничения
>портабельного набора системных вызовов. Хотя возможно,
>что починки требуют мои /dev/handsN.
в силу архитектурных особенностей, на уровне POSIX вы не получите "waitpid для любого процесса". и это логично.
если за рамками POSIX, то это уже system dependant.
например, в QNX4 микроядро может рассылать сообщение _SYSMSG_SUBTYPE_DEATH заданным процессам по завершению любого процесса в системе. фактически, полная трассировка остановки процессов. этим удобно пользоваться, когда вам нужно сделать какой-то cleanup на стороне сервера по завершению клиента, пусть даже аварийному по SIGKILL. недостаток такого подхода - чистый deadloop если процесс, подписанный на указанное сообщение зависает. тут всем хана :)
скорее всего, свои подходы есть и в Linux/BSD. не скажу про Linux, но в BSD в контексте ядра можно поставить hook на fork()/exit() -> можно нарисовать lkm под свои задачи ну и так далее. но это опять таки system dependant.
// wbr