2011-10-27 17 views
3

如果我搜索計算應用程序的線程數,所有的答案都涉及外部程序,如top。我想要統計應用程序本身內的線程。如何計算正在運行的線程數(pthreads)?

我不能在線程創建點添加代碼,因爲它發生在一個不可變的庫中。我不能讀/proc

這是一個在幾個不同的Unices上運行的C/pthreads程序。

+0

「man ps」,看看'線程'。例如「ps -TF -p $ pid」,如果你需要遠程控制,你可以使用via ssh運行。 – bestsss

+0

這必須由我的應用程序完成,而不是通過調用另一個應用程序。 – spraff

+0

Pthreads沒有用於計算線程的API,它甚至不保證獲得多個內核線程。你可以「追蹤(2)」你的過程,但這只是你用來調試的黑客。 – rlibby

回答

1

如果您無法讀取/proc你有麻煩了一點,除非你的程序與其他程序讀取/proc

如果你不想讀的,因爲便攜關注的/ proc溝通,你可以使用一個抽象的圖書館,如libproc確實

+0

感謝libproc的提示,但它在這個鎖定的環境中不起作用。引入一個新的庫是一個禁忌。 – spraff

-1

使用top -H。但是很可能,如果你不能讀取proc,top將無法工作。如果是這樣的話,就沒有簡單的方法,這取決於你的具體系統。

0

你可以爲pthread_create編寫一個小包裝器,該包裝器會在鏈接到不可變庫之後對創建的線程進行計數並鏈接到該包裝器。

+1

但是庫不會調用包裝...? – spraff

+0

庫調用pthread_create 。你可以在鏈接時提供pthread_create實現,或者在鏈接時使用,或者使用dmalloc和朋友已知的LD_PRELOAD技巧。 – thiton

+0

可愛的技巧,但這裏不允許。 – spraff

相關問題