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的影响,这可能很有用,但通常不是。
上一篇:linux图形栈


下一篇:第5篇 Shader的组织和优化 - Unity 3D ShaderLab开发实践