我想写一个Linux的c + +程序,监视所有进程运行并写入日志文件,当任何这些进程崩溃,由于sigsegv。C++ Linux监视进程sigsegv
是否有可能这样做,如果是的话,我应该学习什么才能在C++中实现它?
我想写一个Linux的c + +程序,监视所有进程运行并写入日志文件,当任何这些进程崩溃,由于sigsegv。C++ Linux监视进程sigsegv
是否有可能这样做,如果是的话,我应该学习什么才能在C++中实现它?
您可能想要使用ptrace
。看看这个问题: how to intercept linux signals ? (in C)
我想这样做的所有过程将需要重新实现初始化的,或者是一个系统,监控sys目录调用ptrace
每个进程。
我在我的博客上写了一个很温柔的介绍ptrace
。在这里你可以熟悉它:http://purecode.pl/blog/?tag=ptrace。在这里,您可以使用带有信号的ptrace
示例:http://www.win.tue.nl/~aeb/linux/lk/lk-5.html
试图监视系统上的所有进程将会很繁琐。如果您对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
这将使信息转储挂钩,当一个进程终止,yourcoredumphook
将开始与核心转储根通过标准输入发送,这样你就可以找出哪个进程通过分析coredump而终止
你真的想用这么多的免费工具来编写一个脚本吗?试试[SeaLion](http://sealion.com)。它非常轻巧。 – Kevin