如何检查Linux线程的状态?

时间:2012-03-06 02:46:46

标签: linux multithreading

如何使用代码检查Linux线程的状态,而不是工具?我想知道一个线程是否正在运行,锁定在锁上,或者由于其他原因而睡着了。我知道Linux工具“top”可以完成这项工作。但是如何在我自己的代码中实现它。感谢。

3 个答案:

答案 0 :(得分:6)

我认为您应该详细研究/proc文件系统,并记录here, inside kernel source tree

这是Linux内核向外界讲述的方式!

还有一个libproc(由pstop使用,它会读取/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。