2013-01-09 13 views
1

我想編寫一個SystemTap腳本,它可以確定探測調用中當前PID的實際線程數。該數字應該與此時/proc/4711/status的輸出中顯示的數量相同。SystemTap腳本如何確定當前線程數?

我的第一種方法是計數kprocess.createkprocess.exit事件發生,但是這顯然給你的線程數的只有相對增加/減少。

SystemTap腳本如何使用某個給定的API函數來確定此編號?也許腳本可能會讀取與用於proc文件系統輸出的相同的內核信息?

回答

2

在任何一種情況下,您都將受到競爭條件的影響 - stap探針無法鎖定內核結構,這將需要確保任務列表在計數時不會更改。這對於一般的systemtap探測上下文尤其如此,就像在kprobe的中間一樣。

對於第一種方法,您可以添加一個「probe begin {}」 - 任務列表的時間迭代,以便從一些嵌入式C代碼中初始化線程數。一個挑戰是從嵌入式C代碼中設置systemtap腳本全局變量(這裏沒有記錄的API),但是如果您查看翻譯器生成的內容(stap -p3),它應該是可行的。

第二種方法是做同樣的迭代,但出於上述鎖定原因,這通常不安全。