如何停止快速修复启动器
how to stop a quickfix-initiator
我正在运行一个在 Solaris X86 平台上用 c++ 编码的修复启动器应用程序。 为了定期启动和停止应用程序,我使用了一个 shell-script 包装器和 cron,对于 stop,它会杀死应用程序的 pid。 我想知道是否有更优雅和"专业"的方式来停止初始化器,因为 kill 会立即关闭整个过程,而无需在修复会话上进行任何适当的注销、断开套接字上的连接、删除文件句柄等。
您能否就如何在修复应用程序中处理 SIGINT 提供建议或举例说明?
看看 sigaction,这是你真正需要的。如何使用的示例在这里找到 - 当然,C,但也适用于C++......
如果你发现信号更容易处理(真相...(:好吧,避免它(见链接...(。
请注意,默认情况下杀死会发送SIGTERM
,所以这是您实际上应该捕获的...
还要注意,在信号处理程序中,您只能使用异步安全函数!此处包含的列表
我假设您的程序在某个循环中运行。为了避免非异步安全函数出现问题,您可以考虑在信号处理程序中重置循环条件,让其余部分再次处理主线程(从循环中断并在之后清理(。
但是,如果您依赖于阻止 IO,则可能会引入调用来选择或轮询(如果尚未这样做(,尤其是在读取之前检查 IO 句柄。您可以添加从信号处理程序激活的其他文件描述符,以便能够过早中断选择/轮询。
您可以使用 eventfd 获得这样的附加文件处理程序,但是,它是特定于 linux 的,或者通过打开管道并从信号处理程序中写入它以更便携的方式获得。
相关文章:
- 如何使用 ctypes 停止和重新启动从 Python 运行的C++代码
- 程序在使用 system() 启动另一个可执行文件时停止
- Qt/C++ 系统单元启动/停止时的信号
- 如何使重新启动此循环,当用户输入 1 时,并在 0 时停止
- 如何在无限循环中启动和停止(切换)多个线程
- 高速解决方案以循环浏览不同变量的所有组合,并使用启动步骤停止方案(C )
- 导致ESP32随机停止并触发看门狗计时器重新启动的串行数据包
- Eclipse C++ 调试器不会在断点处停止,而是在调试启动后立即终止
- 无法弄清楚如何为用户提供启动,停止和重新启动程序的所有选项?
- C++使用Qt库的应用程序在屏幕保护程序启动时停止工作
- 当屏幕保护程序在Linux下启动或停止时,是否可以通知通知
- 通过C 代码在Linux上启动/停止守护程序
- 每次启动/停止时,QTimer都会变快
- 停止,然后启动线程
- 启动-停止守护进程启动的C程序无法捕获信号
- 在C++/MFC中停止和启动DirectX声音合成器时弹出/单击
- 在 C++ 中启动和停止线程中的循环
- QT:无法在启动/停止按钮中终止 Qprocess
- 在c++中启动、停止和重新启动线程时的问题
- 如何在MFC应用程序启动时停止调用OnFileNew()