在Linux上的生产多线程程序中,信号处理的最佳实践是什么?

时间:2015-03-10 14:32:15

标签: c linux multithreading signals

我正在编写一个可以在Linux系统上运行的多线程程序。我想确定,如果程序处于可靠的运行状态(即没有分段错误,没有中止等等),退出时它会最终确定写入一些尾随信息的文件。为此,我想处理termination signals以触发正常关闭。 由于它是一个多线程程序,所有信号都被掩盖了所有线程,但是主信号,它在仅用终止信号填充的信号集上调用sigwait。因此,所有其他信号都由其默认操作处理。

这是一个很好的做法,还是我应该为每个信号提供自定义操作?

2 个答案:

答案 0 :(得分:2)

  

这是一个好习惯,

绝对是的。在任何其他方式处理多线程环境中的终止信号(通过没有单个线程负责它们)几乎是不可能的。

  

或者我应该为每个信号提供自定义操作?

没有。您通常希望处理SIGINT,SIGTERM和SIGHUP。 SIGKILL无法处理,我将单独留下SIGQUIT,因此可以用来核心转储应用程序。

答案 1 :(得分:0)

使用signalfd()!

这使您可以在单个select()调用中处理信号以及文件描述符就绪状态。