如何使用代码检查Linux线程的状态,而不是工具?我想知道一个线程是否正在运行,锁定在锁上,或者由于其他原因而睡着了。我知道Linux工具“top”可以完成这项工作。但是如何在我自己的代码中实现它。感谢。
答案 0 :(得分:6)
我认为您应该详细研究/proc文件系统,并记录here, inside kernel source tree。
这是Linux内核向外界讲述的方式!
还有一个libproc
(由ps
和top
使用,它会读取/proc/
个伪文件。
请参阅与您相关的this question。
读取/proc/
下的文件不执行任何磁盘I / O(因为/proc/
是伪文件系统),所以快速进行。
答案 1 :(得分:2)
假设您的流程ID为100。
转到/proc/100/task
目录,您可以在那里看到代表每个线程的多个目录。
然后在每个子目录中,例如/proc/100/task/10100
有一个名为status
的文件。
该文件中的第二行是线程的状态信息。
答案 2 :(得分:0)
您也可以通过查看您的流程所属服务的cgroup层次结构来找到它。 Cgroup有一个名为“tasks”的文件,该文件列出了服务的所有任务。
例如:
cat /sys/fs/cgroup/systemd/system.slice/hello.service/tasks
注意:应在Linux内核中启用cgroup。