c++ linux monitor processes for sigsegv

c++ linux monitor processes for sigsegv

本文关键字:for sigsegv processes monitor linux c++      更新时间:2023-10-16

我想为 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的系统。