Linux下如何统计进程中的线程数
问题:我正在运行一个应用程序,它在运行时分叉许多线程。我想知道程序中有多少线程正在运行。在 Linux 上检查进程的线程数最简单的方法是什么?
如果您想查看 Linux 环境中每个进程的线程数,有多种方法可以实现。
方法一:/proc
位于 /proc
目录中的 proc
伪文件系统是查看任何活动进程的线程计数的最简单方法。 /proc
目录以可读文本文件的形式导出与现有进程和系统硬件(如 CPU、中断、内存、磁盘等)相关的大量信息。
$ cat /proc/<pid>/status
上面的命令将通过 <pid>
显示进程的详细信息,其中包括进程状态(例如,睡眠、运行)、父进程 PID、UID、GID、使用的文件描述符数量以及上下文切换数量。输出还指示进程中创建的线程总数,如下所示。
Threads: <N>
例如,要检查 PID 20571
的进程的线程计数:
$ cat /proc/20571/status

输出表明该进程中有 28
个线程。
或者,您可以简单地计算 /proc/
中找到的目录数量,如下所示。
$ ls /proc/<pid>/task | wc
这是因为,对于进程中创建的每个线程,都会在 /proc/
中创建一个相应的目录,并以其线程 ID 命名。因此,/proc/
中的目录总数代表进程中的线程数。
方法二:ps
如果您是多功能 ps
命令的狂热用户,此命令还可以向您显示进程的各个线程(使用 H
选项)。以下命令将打印进程的线程计数。需要使用 h
选项来隐藏 top
输出中的标头。
$ ps hH p <pid> | wc -l
如果您想监控进程的不同线程消耗的硬件资源(CPU和内存),请参阅本教程。