2012-03-06 88 views
2

我該如何使用代碼檢查Linux線程的狀態,而不是工具?我想知道一個線程是否正在運行,鎖定是否鎖定,或者是因爲其他原因而睡着。我知道Linux工具「top」可以完成這項工作。但是如何在我自己的代碼中實現它。謝謝。如何檢查Linux線程的狀態?

+1

解析'top'輸出一個選項? :-) – Irfy 2012-03-06 02:53:06

回答

6

我覺得你應該詳細研究一下/proc文件系統,也記錄在here, inside kernel source tree

這是Linux內核告訴外部的方式!

還有一個libproc(由pstop使用,其讀取/proc/僞文件)。

請參閱this question,與您的相關。

讀取/proc/下的文件不會執行任何磁盤I/O(因爲/proc/是僞文件系統),因此執行速度很快。

2

比方說你的進程ID是100

轉到/proc/100/task目錄有你可以看到代表每個線程多個目錄。

然後在每個子目錄內,例如, /proc/100/task/10100有一個名爲status的文件。

此文件中的第二行是線程的狀態信息。

0

您也可以通過查看您的進程所屬服務的cgroup層次結構來找到它。 Cgroups有一個名爲「tasks」的文件,這個文件列出了一個服務的所有任務。

例如:

貓/sys/fs/cgroup/systemd/system.slice/hello.service/tasks

注:cgroup中應該在Linux內核中啓用。