Сценарий: я разрабатываю приложение для мониторинга демонов, которое запускает и останавливает демоны по запросу (TCP-IP). Для этого после разветвления я вызываю setsid()
, чтобы «отсоединить» новый процесс от родителя (процесс мониторинга).
Когда я пытаюсь убить один из процессов, созданных приложением мониторинга, он прекращает свое существование.
Вот мой код:
int retval;
char* arg_list[] = {
NULL /* The argument list must end with a NULL. */
};
retval = fork();
if (retval == 0)
{
umask(0);
setsid();
execv(LBSDPATH, arg_list);
exit(0);
}
Насколько я понимаю, несуществующий/зомби-процесс означает, что родитель еще не присоединился к процессу. не setsid()
решить?