root として実行する Mac OS X Carbon Daemon があります。正しく終了するには、SIGTERM (およびその他のシグナル) を受信して処理する必要があります。コードは次のようになります。
static void sig_hup(int sig)
{
fprintf(stderr, "Caught signal %d.\n" sig); fflush(stderr);
}
int main(int argc, const char * argv[]) {
...
signal(SIGTERM, sig_hup);
...
CFRunLoopRun(); // run the event loop
...
return 0;
}
問題は、sig_hup() が呼び出されないことです。
おそらくシグナルは CFRunLoopRun() によってキャッチされますか? もしそうなら、デーモンは何か (sudo launchctl unload など) がそれを終了しようとしていることをどのように通知されますか?