No Linux, quando você mata um pai, o filho recebe um SIGHUP , que geralmente o mata, a menos que tenha sido feito para permanecer vivo como um daemon, caso em que ele irá prender o sighup. (Eu acho que é por isso que um geralmente usa SIGHUP para dizer a um daemon para se atualizar, já que é convenientemente sempre preso).
No Mac OS X não consigo encontrar documentação, mas parece que nenhum SIGHUP foi enviado. Como resultado, o processo filho é órfão e seu novo pai é o avô.
A maneira como você lida com isso é enviar o sinal kill para o grupo de processos do pai, não o processo pai em si. Isso vai neutralizar todos os filhos e netos, bem como uma ressalva. Se qualquer processo filho fizer um setpgrp () ou setsid (), ele escapa da associação do grupo de processos. Ele não obterá o kill enviado para seu antigo grupo de processos. Normalmente, não é necessário se preocupar com este último, pois geralmente é intencional quando usado para atingir esse objetivo.