Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 5 Handling Interrupt Signals
作者:互联网
Handling Interrupt Signals
现实的应用程序需要在被Ctrl-C或SIGTERM等其他信号中断时干净地关闭。默认情况下,这些命令会杀死进程,这意味着消息不会被刷出,文件不会被干净地关闭,等等。
程序提供了s_catch_signals(),它捕获Ctrl-C (SIGINT)和SIGTERM。当这些信号到达时,s_catch_signals()处理程序设置全局变量s_interrupted。由于您的信号处理程序,您的应用程序不会自动死亡。相反,你有机会清理并优雅地退出。您现在必须显式地检查中断并正确地处理它。通过在主代码的开头调用s_catch_signals()(从interrupt.c中复制)来实现这一点。这就建立了信号处理。中断会对ZeroMQ调用产生如下影响:
如果代码在阻塞调用中阻塞(发送消息、接收消息或轮询),那么当信号到达时,调用将返回EINTR。像s_recv()这样的包装器在被中断时返回NULL。 因此,检查EINTR返回代码,NULL返回,和/或s_interrupted。 如果调用s_catch_signals()而不测试中断,则应用程序将不受Ctrl-C和SIGTERM的影响,这可能很有用,但通常不是。
标签:Chapter,Handling,Ctrl,选译,signals,中断,调用,catch,SIGTERM 来源: https://www.cnblogs.com/usen521/p/15328415.html