首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于sigsegv的c++ linux监控进程

用于sigsegv的c++ linux监控进程
EN

Stack Overflow用户
提问于 2012-06-20 21:37:48
回答 3查看 1.2K关注 0票数 3

我想为linux编写一个c++程序,它可以监控所有运行的进程,并在其中任何一个进程由于sigsegv而崩溃时写入日志文件。

可以做到这一点吗?如果可以,我应该学习什么才能在c++中实现它?

EN

回答 3

Stack Overflow用户

发布于 2012-06-20 21:58:50

尝试监视系统上的所有进程将是繁重的。如果您对SIGSEGV特别感兴趣,那么您可能需要考虑将自己安装为核心转储处理程序。它不会捕获要求禁用核心转储(ulimit -c 0)的进程,但您将获得所有其他进程。

代码语言:javascript
复制
echo "|usr/local/sbin/crashcollector" >/proc/sys/kernel/core_pattern

现在,每次进程崩溃时,都会在其标准输入上使用核心转储调用/usr/local/sbin/crashcollector。这个程序可以做它想做的任何事情,比如保存核心转储和/或通知其他事情。

票数 4
EN

Stack Overflow用户

发布于 2012-06-20 22:07:04

我希望你能捕捉到所有进程的崩溃事件。使用ptrace是一种方法,但它非常复杂,您需要跟踪所有进程并附加到稍后创建的新进程,而且还会造成性能损失。

您可以通过钩子coredump捕获所有进程崩溃事件

代码语言:javascript
复制
echo "|yourcoredumphook" > /proc/sys/kernel/core_pattern

这将启用核心转储挂钩,当进程终止时,yourcoredumphook将以根用户身份启动,并通过标准输入发送核心转储,因此您可以通过分析核心转储来确定哪个进程终止

票数 4
EN

Stack Overflow用户

发布于 2012-06-20 21:49:46

为此,您可能需要使用ptrace。看一下这个问题:how to intercept linux signals ? (in C)

我认为对所有进程执行此操作都需要重新实现init,或者可能需要一个监视sys目录的系统为每个进程调用ptrace

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11120865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档