2012-06-20 78 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而終止