Он уничтожается после того, как код обработчика сигнала завершает работу, в вашем случае он фактически не умрет, пока не будет выполнен код, который вы поместили в код обработчика для SIGINT (который должен закрыть дочерний процесс, если вы написали его правильно).
Похоже, что ваш код обработчика делает что-то неправильно, что не позволяет процессу завершиться, пожалуйста, опубликуйте свой код обработчика и как вы настраиваете свой обработчик, как можно выполнить SIGIGN (игнорировать) на SIGINT, чтобыCTRL + C фактически ничего не делает с вашей программой.
Убедитесь, что вы вызываете exit (0) или exit (1), либо с кодом ошибки, чтобы сообщить процессу о прекращении, если не процесс не завершится.