簡體   English   中英

用於sigsegv的c ++ linux監視進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM