通过信号处理优雅地退出Linux上的C ++服务器应用程序

时间:2015-11-23 12:39:23

标签: c++ linux signals

我有一个在Linux上运行的C ++服务器程序,它从客户端计算机接收数据并将它们存储在MySQL数据库中。为了提高效率,传入的数据保存在内存缓冲区中,并定期刷新到数据库(或当其大小达到阈值时)。冲洗期可能很长(例如:3分钟)。

如果用户终止此程序(通过发送SIGTERMSIGINT),理想情况下应该在退出(正常退出)之前将缓冲区刷新到数据库。

我从这些问题中学到了信号处理的方法。

Linux C catching kill signal for graceful termination

Simple Linux Signal Handling

我想澄清以下几点;

  1. 在捕获信号后,将内存数据写入数据库是否有效?

  2. 使用signalfd()而不是sigaction()是否更好,因为我可以通过服务器select()循环中的FD接收信号?

  3. 我是否应该在此方案中捕获SIGTERMSIGINT以外的信号以便正常退出?

0 个答案:

没有答案