2012-06-20 59 views
3

我想写一个Linux的c + +程序,监视所有进程运行并写入日志文件,当任何这些进程崩溃,由于sigsegv。C++ Linux监视进程sigsegv

是否有可能这样做,如果是的话,我应该学习什么才能在C++中实现它?

+0

你真的想用这么多的免费工具来编写一个脚本吗?试试[SeaLion](http://sealion.com)。它非常轻巧。 – Kevin

回答

0

您可能想要使用ptrace。看看这个问题: how to intercept linux signals ? (in C)

我想这样做的所有过程将需要重新实现初始化的,或者是一个系统,监控sys目录调用ptrace每个进程。

4

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

echo "|usr/local/sbin/crashcollector" >/proc/sys/kernel/core_pattern 

现在/usr/local/sbin/crashcollector将每一次的标准输入核心转储进程崩溃调用。这个程序可以做任何想做的事情,比如保存核心转储和/或通知别的东西。

4

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

您可以通过钩coredump捕捉到所有进程崩溃事件:

echo "|yourcoredumphook" > /proc/sys/kernel/core_pattern 

这将使信息转储挂钩,当一个进程终止,yourcoredumphook将开始与核心转储根通过标准输入发送,这样你就可以找出哪个进程通过分析coredump而终止