如何停止quickfix-initiator

时间:2017-07-07 07:50:22

标签: c++ quickfix

我正在运行一个修复启动器应用程序,在Solaris X86平台上用c ++编写。 要在常规基础上启动和停止应用程序,我使用shell脚本包装器和cron,对于stop,它会对应用程序的pid执行kill操作。 我想知道是否有一种更优雅和“专业”的方式来阻止无名者,因为kill会立即关闭整个进程,而无需正确注销修复会话,断开套接字,删除文件句柄等。< / p>

请您提供建议或举例说明如何在修复应用程序中处理SIGINT?

1 个答案:

答案 0 :(得分:1)

看一下sigaction,这就是你真正需要的。一个如何使用的例子找到here - 确定,C,但也适用于C ++ ......

如果你发现signal更容易处理(真相......):嗯,避免它(见链接......)。

请注意,默认情况下kill会发送SIGTERM,所以这就是你实际应该抓住的......

请注意,使用信号处理程序,您只能使用异步安全功能!列表包含在here

我假设您的程序在某个循环中运行。为了避免非异步安全函数的问题,您可以考虑只重置信号处理程序中的循环条件,让其余部分再次处理主线程(从循环中断开然后清理)。

但是,如果你依赖于阻止IO,你可能会调用selectpoll(如果还没有这样做),特别是在读取之前检查IO句柄。您可以添加从信号处理程序激活的其他文件描述符,以便能够提前中断选择/轮询。

这样一个额外的文件处理程序,你可以使用eventfd,但是,这是特定于Linux的,或者通过打开管道并从信号处理程序中写入它来以更便携的方式。