当前位置: 首页 > 编程笔记 >

计算Linux上进程中的线程数

梁丘凯定
2023-03-14
本文向大家介绍计算Linux上进程中的线程数,包括了计算Linux上进程中的线程数的使用技巧和注意事项,需要的朋友参考一下

Linux进程可以可视化为程序的运行实例,其中Linux中的每个线程不过是进程的执行流。您知道如何在Linux环境中查看每个进程的线程数吗?有几种计数线程数的方法。本文讨论如何读取有关Linux上进程的信息以及如何计算每个进程的线程数。

阅读过程信息

要读取过程信息,请使用“ ps”命令。此命令用于读取Linux上当前进程的快照。但是,ps -eps aux命令显示所有进程的名称。

要读取过程信息,请使用以下命令–

$ ps

样本输出应如下所示–

PID TTY TIME CMD
5843 pts/0 00:00:00 bash
5856 pts/0 00:00:00 ps

要显示所有进程名称,请使用以下命令–

$ ps -e

样本输出应如下所示–

PID TTY     TIME CMD
1 ?       00:00:01 init
2 ?       00:00:00 kthreadd
3 ?       00:00:00 ksoftirqd/0
5 ?       00:00:00 kworker/0:0H
7 ?       00:00:07 rcu_sched
8 ?       00:00:00 rcu_bh
9 ?       00:00:02 rcuos/0
10 ?       00:00:00 rcuob/0
11 ?       00:00:00 migration/0
12 ?       00:00:00 watchdog/0
13 ?       00:00:00 watchdog/1
14 ?       00:00:00 migration/1
15 ?       00:00:00 ksoftirqd/1
17 ?       00:00:00 kworker/1:0H
18 ?       00:00:01 rcuos/1
19 ?       00:00:00 rcuob/1
20 ?       00:00:00 watchdog/2
21 ?       00:00:00 migration/2
22 ?       00:00:00 ksoftirqd/2
24 ?       00:00:00 kworker/2:0H
25 ?       00:00:04 rcuos/2
26 ?       00:00:00 rcuob/2
27 ?       00:00:00 watchdog/3
28 ?       00:00:00 migration/3
29 ?       00:00:00 ksoftirqd/3
31 ?       00:00:00 kworker/3:0H
32 ?       00:00:01 rcuos/3
33 ?       00:00:00 rcuob/3
34 ?       00:00:00 khelper
35 ?       00:00:00 kdevtmpfs
36 ?       00:00:00 netns
37 ?       00:00:00 perf
38 ?       00:00:00 khungtaskd
39 ?       00:00:00 writeback
40 ?       00:00:00 ksmd
41 ?       00:00:00 khugepaged
42 ?       00:00:00 crypto
43 ?       00:00:00 kintegrityd
44 ?       00:00:00 bioset
45 ?       00:00:00 kblockd
46 ?       00:00:00 ata_sff
............

每个进程计数线程

有几种方法可以计算每个进程的线程数。它们显示如下-

方法1 – / proc

这是查看Linux机器上任何活动进程的线程数的最简单方法。proc命令导出进程和系统硬件信息的文本文件,例如CPU,中断,内存,磁盘等。

要查看进程的线程数,请使用以下命令-

$ cat /proc/<pid>/status

例如,这里我们将PID添加为1041。然后,命令应如下所示–

$ cat /proc/1041/status

样本输出应如下所示:

Name: cups-browsed
State: S (sleeping)
Tgid: 1041
Ngid: 0
Pid: 1041
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups: 0
VmPeak: 75364 kB
VmSize: 75364 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 5932 kB
VmRSS: 5932 kB
VmData: 568 kB
VmStk: 136 kB
VmExe: 48 kB
VmLib: 8712 kB
VmPTE: 164 kB
VmSwap: 0 kB
Threads: 1
SigQ: 0/31329
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001000
SigCgt: 0000000180004a02
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
Seccomp: 0
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 134
nonvoluntary_ctxt_switches: 1

上面的示例每个进程有一个线程。另一种方法是计算/ proc / <pid> / task中找到的目录数。

因为,在进程中创建的每个线程,都会在/ proc / <pid> / task中创建一个各自的目录,并以其线程ID命名。因此,/ proc / <pid> /任务中的目录总数表示进程中的线程数。

要验证它,请使用以下命令–

$ ls /proc/<pid>/task | wc

在上述命令中,我们将PID设置1041,然后,该命令应如下所示–

$ ls /proc/1041/task | wc

样本输出应如下所示:

tp@linux:~$ ls /proc/1041/task |wc
1 1 5

上面的输出描述了大约1041进程,并且其中有一个目录。

方法2 – ps

 PS 命令显示与“各个线程H” 的选择。以下命令显示进程的线程数。

$ ps hH p 1041 | wc -l

输出应该像这样-

tp@linux:~$ ps hH p 1041 | wc -l
1
tp@linux:~$

恭喜你!现在,您知道“如何在Linux上计算进程中的线程数”。在下一篇Linux文章中,我们将学习有关这些命令类型的更多信息。继续阅读!

 类似资料:
  • 问题内容: Linux下一个进程可以创建的最大线程数是多少? 如何(如果可能)修改该值? 问题答案: Linux的每个进程限制没有单独的线程,只是系统上的进程总数的限制(线程本质上只是Linux上具有共享地址空间的进程),您可以这样查看: 默认值为内存页数/ 4。您可以像这样增加: 单个用户可以创建的进程(以及线程)的数量也有限制,有关这些限制的详细信息,请参见。

  • 我是java的新手,我正在尝试编写一个包含两个参数的程序: 我们必须对素数求和的数 我们必须执行此操作的线程数 所以我使用了一个名为Eratosthene的方法来存储一个布尔数组,如果一个数字是素数,我们将其标记为真,然后我们将这个数字的所有倍数标记为假。 我试着把我的数组分成每个线程的子数组,在每个子数组中进行运算,最后把所有子数组的结果相加。 但我不知道我做错了哪里:有时程序没有给出好的结果。

  • 为什么单线程和多线程脚本具有相同的处理时间?多线程实现不是应该少1/#线程数吗?(我知道当您达到最大cpu线程时,回报会递减) 我搞砸了我的实现吗?

  • 问题内容: 在阅读了这个答案和Robert Love的“LinuxKernelDevelopment”之后,随后在系统调用中,我发现Linux中的进程和线程(几乎)与内核没有区别。它们之间有一些调整(在引用的SO问题中被讨论为“更多共享”或“更少共享”),但是我仍然有一些问题需要解答。 我最近开发了一个包含几个POSIX线程的程序,并决定在此前提下进行试验。在创建两个线程的进程中,所有线程当然都会

  • 本文向大家介绍Linux中进程和线程的对比与区别,包括了Linux中进程和线程的对比与区别的使用技巧和注意事项,需要的朋友参考一下 Linux中进程和线程的对比与区别 1.概念 进程:正在运行中的程序。 线程:进程中的一条执行路径。 2.区别 (1)通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和

  • 问题内容: 我在使用Java 1.6(1.6.0_02或1.6.0_04)运行Red Hat Linux(内核版本为2.4.21-37.ELsmp)的测试计算机上遇到问题。问题是,一旦在单个线程组中创建了一定数量的线程,操作系统将不愿意或无法创建更多线程。 这似乎是特定于Java创建线程的,因为C线程限制程序能够创建约1.5k线程。此外,Java 1.4 JVM不会发生这种情况……它可以创建超过1