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

时间:2014-08-14 12:07:24

标签: c++ linux qt error-handling runtime-error

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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