Похоже, код, созданный ранее для запуска процесса таким образом, что его жизнь полностью отделена от этого запущенного кода.Таким образом, дочерний элемент дочернего процесса запускается для выполнения интересного кода, но промежуточный процесс (прямой дочерний элемент) необходимо удалить из списка процессов, поэтому ожидающий код для удаления зомби.Полный шаблон, вероятно, таков:
if (fork()==0) { // child
if (fork()==0) { /// gran child
// interesting things happens here in "detached" mode
exec(..;);
exit(...);
}
// direct child is of no use,
// just to build the detached granchild,
// disappear immediatly
exit(...);
}
wait(...); // need to remove the child zombie (wait or waitpid)