Как я могу отслеживать смерть дочернего процесса, не приводя родительский процесс до тех пор, пока дочерний процесс не будет убит?Отслеживание смерти дочернего процесса
Я пытаюсь сценарий клиент-сервер, где сервер принимает соединение от клиента и открывает новый процесс для каждого принимаемого им соединения.
Я игнорирую сигналы SIGCHLD, чтобы предотвратить создание зомби.
signal(SIGCHLD, SIG_IGN);
while(1)
{
accept();
clients++;
if(fork() ==0)
{
childfunction();
clients--;
}
else
{
}
}
Проблема в приведенном выше сценарии является то, что, если дочерний процесс получает убит в функции childfunction()
, глобальная переменная clients
не получает убавления.
ПРИМЕЧАНИЕ: Я ищу решение без использования сигнала SIGCHLD ... Если возможно
Вы можете что-то сделать в обработчике сигналов SIGCHLD – tristan
Я уже упоминал ... Сигнал SIGCHLD игнорируется ..? – codingfreak
+1 для безумно драматического титула и вступительного предложения. D: –