[英]c++ linux monitor processes for sigsegv
我想為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 yourcoredumphook
啟動,coredump通過stdin發送,這樣你就可以通過分析coredump找出終止哪個進程
您可能想要使用ptrace
。 看看這個問題: 如何攔截linux信號? (在C中)
我想這對所有進程執行此操作都需要重新實現init,或者可能需要一個監視sys目錄的系統來為每個進程調用ptrace
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.