void InstallSignalHandler()
{
// Make sure the signal does not terminate the application.
signal(SIGHUP, SIG_IGN);
dispatch_queue_t queue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_SIGNAL,
SIGHUP, 0, queue);
if (source) {
dispatch_source_set_event_handler(source, ^{
MyProcessSIGHUP();
});
// Start processing signals
dispatch_resume(source);
}
}
Signal dispatch sources are not a replacement for the synchronous signal handlers you install using thesigaction function. Synchronous signal handlers can actually catch a signal and prevent it from terminatingyour application. Signal dispatch sources allow you to monitor only the arrival of the signal. In addition, youcannot use signal dispatch sources to retrieve all types of signals. Specifically, you cannot use them to monitorthe SIGILL, SIGBUS, and SIGSEGV signals.
If you are developing code for a custom framework, an advantage of using signal dispatch sources is that yourcode can monitor signals independent of any applications linked to it. Signal dispatch sources do not interferewith other dispatch sources or any synchronous signal handlers the application might have installed.