Installing a block to monitor signals (via Dispatch Sources)

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. 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值