我該如何使用代碼檢查Linux線程的狀態,而不是工具?我想知道一個線程是否正在運行,鎖定是否鎖定,或者是因爲其他原因而睡着。我知道Linux工具「top」可以完成這項工作。但是如何在我自己的代碼中實現它。謝謝。如何檢查Linux線程的狀態?
2
A
回答
6
我覺得你應該詳細研究一下/proc文件系統,也記錄在here, inside kernel source tree。
這是Linux內核告訴外部的方式!
還有一個libproc
(由ps
和top
使用,其讀取/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內核中啓用。
相關問題
- 1. 如何檢查電子在線狀態。
- 2. 如何檢查進程是否處於掛起狀態(Linux)
- 3. 如何檢查線程堆棧的當前狀態
- 4. 檢查程序的狀態
- 5. 如何檢查namenode狀態?
- 6. C#:查詢線程狀態
- 7. 檢查無線狀態的Qt
- 8. 檢查進程狀態
- 9. 我如何檢查一個星號中繼線的狀態
- 10. 檢查永久在線狀態
- 11. 如何將檢查狀態設置爲false如果檢查狀態不確定
- 12. 如何檢查jqGrid中行的狀態
- 13. 如何檢查RxBleConnection的狀態
- 14. 如何檢查401的HTTP狀態碼?
- 15. 如何檢查ToggleButton的啓動狀態
- 16. 如何檢查LoadApplicationService的完成狀態?
- 17. Azure如何檢查WorkerRole的狀態?
- 18. 如何檢查故事板的狀態?
- 19. 如何檢查RegularExpressionValidator的狀態
- 20. 如何獲得線程的狀態?
- 21. ASP.NET在長時間運行的線程上檢查線程狀態?
- 22. 檢查Ansible進程的狀態
- 23. 檢查capsLock狀態
- 24. 檢查GetStreamAsync狀態
- 25. unix狀態檢查!
- 26. 檢查AutoResetEvent狀態
- 27. Python:如何檢查sendline執行的進程的狀態
- 28. 如何在我的應用程序中檢查3G的狀態:
- 29. 如何檢查Bluemix活動狀態?
- 30. 如何檢查dispatch_async隊列狀態?
解析'top'輸出一個選項? :-) – Irfy 2012-03-06 02:53:06