c++ linux monitor processes for sigsegv
c++ linux monitor processes for sigsegv
我想为 linux 编写一个 c++ 程序,该程序监视所有正在运行的进程,并在任何进程因 sigsegv 而崩溃时写入日志文件。
是否可以这样做,如果是,我应该学习什么才能在 c++ 中实现它?
尝试监视系统上的所有进程将很繁重。如果您特别对 SIGSEGV 感兴趣,您可能需要考虑将自己安装为核心转储处理程序。它不会捕获要求禁用核心转储(ulimit -c 0
)的进程,但您将获得所有其他进程。
echo "|usr/local/sbin/crashcollector" >/proc/sys/kernel/core_pattern
现在,每次进程崩溃时,都会使用其标准输入上的核心转储调用/usr/local/sbin/crashcollector
。该程序可以做任何它想做的事情,例如保存核心转储和/或通知其他内容。
我希望你会捕获所有进程崩溃事件。使用 ptrace 是一种方法,但它非常复杂,您需要跟踪所有进程并附加到以后创建的新进程,否则也会遇到性能损失。
您可以通过钩子coredump
捕获所有进程崩溃事件:
echo "|yourcoredumphook" > /proc/sys/kernel/core_pattern
这将启用 Coredump hook,当进程终止时,yourcoredumphook
将以 root 身份启动,核心转储通过 stDIN 发送,因此您可以通过分析核心转储来确定哪个进程终止
您可能
希望为此使用ptrace
。看看这个问题:如何拦截 Linux 信号?(C)
我想对所有进程执行此操作需要重新实现 init,或者可能需要一个监视 sys 目录以为每个进程调用ptrace
的系统。
相关文章:
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Linux for Windows上编译C++代码时出错
- 调用专用模板时出错"no matching function for call to [...]"
- 为什么我的for循环不能正确获取argv
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 在基于范围的for循环中使用结构化绑定声明
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 通过for循环使用用户输入填充列表
- 使用for循环检查数组中的重复项
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 正在使用for循环创建QScatterSerie
- Python中的for循环与C++有何不同
- std::memory_order for std::atomic:<T>:wait
- c++ linux monitor processes for sigsegv
- 在Linux Qt Creator c++中使用malloc for char *时接收SIGSEGV信号
- 当迭代通过大串集时,for循环接收到信号SIGSEGV,出现分段故障