Как отслеживать все дочерние процессы для очистки?

У меня есть программа который может fork () и exec () несколько процессов в цепочке. Например: процесс A -> fork, exec B -> fork, exec C -> fork, exec D. Итак, A - прапрадедушка C.

Теперь проблема в том, что у меня нет любое управление процессами B, C и D. Таким образом, может произойти несколько вещей.

  1. Может случиться так, что процесс-потомок сможет выполнить setsid () , чтобы изменить свою группу процессов и сеанс.
  2. Или один из процессов-потомков умирает (например, C), и, следовательно, его дочерний процесс (D) является родительским для init.

Следовательно, я не могу полагаться на идентификатор группы процессов или родительский идентификатор для отслеживания всех потомков A. Есть ли надежный способ отследить всех потомков? В частности, я хотел бы убить всех потомков (сирот и других).

Было бы также здорово, если бы он соответствовал POSIX.

8
задан Gilles 'SO- stop being evil' 4 August 2011 в 11:13
поделиться