我想寫一個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