Отслеживание смерти детского процесса

Как я могу отследить смерть дочернего процесса, не заставляя родительский процесс ждать, пока дочерний процесс не будет уничтожен?

Я пытаюсь сценарий клиент-сервер, где сервер принимает соединение от клиента и разветвляет новый процесс для каждого соединения, которое он принимает.

Я игнорирую сигналы SIGCHLD, чтобы предотвратить создание зомби.

signal(SIGCHLD, SIG_IGN);
while(1)
{
  accept();
  clients++;
  if(fork() ==0)
  {
     childfunction();
     clients--;
  }
  else
  {
  }
}

Проблема в приведенном выше сценарии заключается в том, что если дочерний процесс будет убит вchildfunction() функция, глобальная переменнаяclients не уменьшается.

НОТА: Я ищу решение без использования сигнала SIGCHLD ... Если возможно