我有一台以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 ...)正试图终止它?