我有一个以 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 ...)正在尝试终止它的通知?