如何停止快速修复启动器

how to stop a quickfix-initiator

本文关键字:启动 何停止      更新时间:2023-10-16

我正在运行一个在 Solaris X86 平台上用 c++ 编码的修复启动器应用程序。 为了定期启动和停止应用程序,我使用了一个 shell-script 包装器和 cron,对于 stop,它会杀死应用程序的 pid。 我想知道是否有更优雅和"专业"的方式来停止初始化器,因为 kill 会立即关闭整个过程,而无需在修复会话上进行任何适当的注销、断开套接字上的连接、删除文件句柄等。

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

看看 sigaction,这是你真正需要的。如何使用的示例在这里找到 - 当然,C,但也适用于C++......

如果你发现信号更容易处理(真相...(:好吧,避免它(见链接...(。

请注意,默认情况下杀死会发送SIGTERM,所以这是您实际上应该捕获的...

还要注意,在信号处理程序中,您只能使用异步安全函数!此处包含的列表

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

但是,如果您依赖于阻止 IO,则可能会引入调用来选择或轮询(如果尚未这样做(,尤其是在读取之前检查 IO 句柄。您可以添加从信号处理程序激活的其他文件描述符,以便能够过早中断选择/轮询。

您可以使用 eventfd 获得这样的附加文件处理程序,但是,它是特定于 linux 的,或者通过打开管道并从信号处理程序中写入它以更便携的方式获得。