我正在编写一个可以在Linux系统上运行的多线程程序。我想确定,如果程序处于可靠的运行状态(即没有分段错误,没有中止等等),退出时它会最终确定写入一些尾随信息的文件。为此,我想处理termination signals以触发正常关闭。 由于它是一个多线程程序,所有信号都被掩盖了所有线程,但是主信号,它在仅用终止信号填充的信号集上调用sigwait。因此,所有其他信号都由其默认操作处理。
这是一个很好的做法,还是我应该为每个信号提供自定义操作?
答案 0 :(得分:2)
这是一个好习惯,
绝对是的。在任何其他方式处理多线程环境中的终止信号(通过没有单个线程负责它们)几乎是不可能的。
或者我应该为每个信号提供自定义操作?
没有。您通常希望处理SIGINT,SIGTERM和SIGHUP。 SIGKILL无法处理,我将单独留下SIGQUIT,因此可以用来核心转储应用程序。
答案 1 :(得分:0)
使用signalfd()!
这使您可以在单个select()调用中处理信号以及文件描述符就绪状态。