我有一个在Linux上运行的C ++服务器程序,它从客户端计算机接收数据并将它们存储在MySQL数据库中。为了提高效率,传入的数据保存在内存缓冲区中,并定期刷新到数据库(或当其大小达到阈值时)。冲洗期可能很长(例如:3分钟)。
如果用户终止此程序(通过发送SIGTERM
或SIGINT
),理想情况下应该在退出(正常退出)之前将缓冲区刷新到数据库。
我从这些问题中学到了信号处理的方法。
Linux C catching kill signal for graceful termination
我想澄清以下几点;
在捕获信号后,将内存数据写入数据库是否有效?
使用signalfd()
而不是sigaction()
是否更好,因为我可以通过服务器select()
循环中的FD接收信号?
我是否应该在此方案中捕获SIGTERM
和SIGINT
以外的信号以便正常退出?