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