gpt4 book ai didi

c++ - 如何正确报告 Linux 中另一个进程的突然结束?

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:13 25 4
gpt4 key购买 nike

我正在开发一种嵌入式解决方案,其中有两个应用程序正在运行:一个是用户界面,另一个在后台运行,为 UI 提供数据。

最近我遇到了内存泄漏或类似的错误,这些错误导致 Linux 终止辅助进程,使 UI 处于停止状态,而不告诉用户发生了什么情况。我通过阅读 Linux 的 message 日志文件和终端“Kill -myapp”上软件的打印来解决这个问题。

我的问题是:我如何注意到来自辅助软件的此类事件(以及其他类似事件),以便我可以正确向用户报告并记录它?我的意思是,时不时地查看进程“树”以查看辅助应用程序是否正在运行是很容易的,如果没有运行,则在 UI 中报告“发生了某些事件”,并且在辅助应用程序内部有一个错误处理系统,使其在日志文件中写入刚刚发生的情况并使 UI 不时读取该文件以获取新条目也是合理的,但是 UI 应用程序如何能够更详细地了解在此类更突然的事件中发生了什么? (在本例中,“Linux 杀死了进程”,但它可能是“分段管道”或任何其他)(如果有另一个更好的解决方案,即“不断读取辅助应用程序生成的日志文件”,我也想知道)

注释:UI 是用 C++/Qt 编写的,辅助应用程序是用 C 编写的。虽然使用 Qt 库的解决方案会受到欢迎,但我认为如果给出更通用的解决方案,对整个编程社区来说会更好。

最佳答案

您可以在后端进程中为 POSIX 信号(例如 SIGKILL)创建信号处理程序,并使用例如带有 sigqueue 的另一个信号通知 ui 。任何 IPC 机制都应该可以工作,只要它是异步安全的。了解有关信号的更多信息:tutorialmanual

定期从 ui 端进行检查可能仍然是一个好主意,因为处理程序可能不会成功。

与读取日志文件相比,检查进程是否存活的更好方法是: Check if process exists given its pid

关于c++ - 如何正确报告 Linux 中另一个进程的突然结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25307688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com