2017-07-07 62 views
0

我正在运行修复启动器应用程序,在Solaris X86平台上使用C++编码。 要在常规基础上启动和停止应用程序,我使用一个shell脚本包装器和cron,用于停止应用程序的pid。 我不知道是否有更优雅和“专业”的方式来阻止inniter,因为kill立即关闭完整的进程,没有任何适当的注销修复会话,断开连接,删除文件句柄等。如何停止quickfix-initiator

您可以请教建议或举例说明如何处理修复应用程序中的SIGINT?

回答

1

看看sigaction,这就是你实际需要的。一个例子如何使用你找到here - 当然,C,但也适用于C++以及...

如果你发现signal更容易处理(真相...):好吧,避免它(请参阅链接。 ..)。

要知道,杀默认发送SIGTERM,所以这是你真正应该抓住什么......

注意,那就是,从信号处理程序,只允许使用异步安全功能!列表包含在here

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

如果您依赖于阻止IO,您可能会引入selectpoll(如果还没有这样做),请在读取之前检查IO句柄。你可以添加一个额外的文件描述符,从信号处理程序中激活,然后能够提前中断选择/轮询。

这样一个额外的文件处理程序,你可以通过eventfd获得,但这是linux专用的,或者通过打开管道并从信号处理程序写入到管道,以更便携的方式获得。