如何检查Linux线程的状态?

4

我想知道如何使用代码而非工具来检查Linux线程的状态。我想要知道一个线程是否正在运行、被锁定或因其他原因处于休眠状态。我知道Linux工具“top”可以完成这项工作,但我不知道如何在自己的代码中实现它。谢谢。


1
解析“top”输出是一个选项吗? :-) - Irfy
3个回答

8
我认为你应该详细研究 /proc 文件系统,并查看内核源代码中此处的文档
这是 Linux 内核向外部传递信息的方式!
还有一个名为 libproc 的库(由 pstop 使用),它读取 /proc/ 伪文件。
参见与您相关的此问题
/proc/ 下读取文件不会执行任何磁盘 I/O(因为 /proc/ 是伪文件系统),因此速度很快。

3
假设你的进程ID是100。
转到 /proc/100/task 目录,您可以看到代表每个线程的多个目录。
然后,在每个子目录中,例如 /proc/100/task/10100 中,有一个名为 status 的文件。
该文件中的第二行是线程的状态信息。

0
您还可以通过查看您的进程所属服务的cgroup层次结构来找到它。Cgroups有一个名为“tasks”的文件,该文件列出了服务的所有任务。
例如:
cat /sys/fs/cgroup/systemd/system.slice/hello.service/tasks
注意:您的Linux内核应启用cgroup。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接