2014-10-07 22 views
5

是否有可能在執行新進程,何時關閉以及狀態更改(即停止,分頁等)時得到通知(通過回調或類似方式)?在user-land中,在/ proc上設置一個目錄監聽器很容易。在Linux內核模塊中偵聽新進程

+0

「在用戶的土地,這將是很容易設置上的/ proc目錄監聽器」其實,不,那不行。但[/ proc連接器呢](http://stackoverflow.com/questions/6075013/linux-detect-launching-of-programs)。 – duskwuff 2014-10-08 16:01:20

回答

2

您是否考慮過kprobes?執行某些內核代碼時,可以使用kprobes執行回調函數。例如,您可以添加一個do_fork kprobe,以便在創建新進程時發出警報,如this example中所示。

同樣,您可以添加do_exit()的探測器以在進程退出時捕獲。

若要更改狀態,您可以在sched_switch()上有返回探針,並在狀態更改時捕獲。根據您的應用程序,這可能會增加太多的開銷。

如果你只是想收集數據,進行一些輕的處理,並沒有尋找到與內核模塊的功能遠不止如此,SystemTap的可能是一個很好的替代編寫內核模塊:https://sourceware.org/systemtap/documentation.html

更多細節在Kprobes的: https://www.kernel.org/doc/Documentation/kprobes.txt

sched_switch() SystemTap的例子: https://sourceware.org/systemtap/examples/profiling/sched_switch.stp