Определить "нежный":)
Я предполагаю, что уже существует механизм связи между демоном и графическим интерфейсом. Просто введите команду "quit" и отправьте ее.
Если вы хотите убить демона, даже если он занят чем-то (или заморожен), используйте TerminateProcess ().
Чтобы получить лучшее из обоих, вы можете отправить «quit», затем подождать некоторое время на дескрипторе процесса (WaitForSingleObject ()). Если процесс-демон не умирает, скажем, в течение 5 секунд, завершите его.
Если основной поток демона склонен к длительным периодам активности, пусть демон запускает фоновый поток, который ничего не делает, но ожидает именованного события. Чтобы сообщить об этом потоке, откройте событие по имени в графическом интерфейсе, а затем поднимите его. Демону решать, что делать при обнаружении события, но по крайней мере это будет контролируемое отключение.