http://smilejay.com/2012/06/linux_view_threads/
在SMP系统中,我们的应用程序经常使用多线程的技术,那么在Linux中如何查看某个进程的多个线程呢?
本文介绍3种命令来查看Linux系统中的线程(LWP)的情况:
在我的系统中,用qemu-system-x86_64命令启动了一个SMP的Guest,所以有几个qemu的线程,以此为例来说明。
1. pstree 命令,查看进程和线程的树形结构关系。
1
2
3
4
5
|
[
root
@
jay
-
linux
~
]
# pstree | grep qemu
|
-
gnome
-
terminal
-
+
-
bash
--
-
qemu
-
system
-
x86
--
-
2
*
[
{
qemu
-
system
-
x8
}
]
[
root
@
jay
-
linux
~
]
# pstree -p | grep qemu
|
-
gnome
-
terminal
(
10194
)
-
+
-
bash
(
10196
)
--
-
qemu
-
system
-
x86
(
10657
)
-
+
-
{
qemu
-
system
-
x8
}
(
10660
)
|
|
`
-
{
qemu
-
system
-
x8
}
(
10661
)
|
2. ps 命令,-L参数显示进程,并尽量显示其LWP(线程ID)和NLWP(线程的个数)。
1
2
3
4
5
|
[
root
@
jay
-
linux
~
]
# ps -eLf | grep qemu
root
10657
10196
10657
0
3
13
:
48
pts
/
1
00
:
00
:
00
qemu
-
system
-
x86_64
-
hda
smep
-
temp
.
qcow
-
m
1024
-
smp
2
root
10657
10196
10660
3
3
13
:
48
pts
/
1
00
:
00
:
26
qemu
-
system
-
x86_64
-
hda
smep
-
temp
.
qcow
-
m
1024
-
smp
2
root
10657
10196
10661
2
3
13
:
48
pts
/
1
00
:
00
:
19
qemu
-
system
-
x86_64
-
hda
smep
-
temp
.
qcow
-
m
1024
-
smp
2
root
10789
9799
10789
0
1
14
:
02
pts
/
0
00
:
00
:
00
grep
--
color
=
auto
qemu
|
上面命令查询结果的第二列为PID,第三列为PPID,第四列为LWP,第六列为NLWP。
另外,ps命令还可以查看线程在哪个CPU上运行,命令如下:
1
2
3
4
5
|
[
root
@
jay
-
linux
~
]
# ps -eo ruser,pid,ppid,lwp,psr,args -L | grep qemu
root
10657
10196
10657
1
qemu
-
system
-
x86_64
-
hda
smep
-
temp
.
qcow
-
m
1024
-
smp
2
root
10657
10196
10660
1
qemu
-
system
-
x86_64
-
hda
smep
-
temp
.
qcow
-
m
1024
-
smp
2
root
10657
10196
10661
2
qemu
-
system
-
x86_64
-
hda
smep
-
temp
.
qcow
-
m
1024
-
smp
2
root
10834
9799
10834
1
grep
--
color
=
auto
qemu
|
其中,每一列依次为:用户ID,进程ID,父进程ID,线程ID,运行该线程的CPU的序号,命令行参数(包括命令本身)。
3. top 命令,其中H命令可以显示各个线程的情况。(在top命令后,按H键;或者top -H)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[
root
@
jay
-
linux
~
]
# top -H
top
-
14
:
18
:
20
up
22
:
32
,
4
users
,
load
average
:
2.00
,
1.99
,
1.90
Tasks
:
286
total
,
1
running
,
285
sleeping
,
0
stopped
,
0
zombie
Cpu
(
s
)
:
0.0
%
us
,
0.0
%
sy
,
0.0
%
ni
,
100.0
%
id
,
0.0
%
wa
,
0.0
%
hi
,
0.0
%
si
,
0.0
%
st
Mem
:
3943892k
total
,
1541540k
used
,
2402352k
free
,
164404k
buffers
Swap
:
4194300k
total
,
0k
used
,
4194300k
free
,
787768k
cached
PID
USER
PR
NI
VIRT
RES
SHR
S
%
CPU
%
MEM
TIME
+
COMMAND
10660
root
20
0
1313m
188m
2752
S
2.3
4.9
0
:
46.78
qemu
-
system
-
x86
10661
root
20
0
1313m
188m
2752
S
2.0
4.9
0
:
39.44
qemu
-
system
-
x86
10867
root
20
0
15260
1312
960
R
0.3
0.0
0
:
00.07
top
1
root
20
0
19444
1560
1252
S
0.0
0.0
0
:
00.34
init
2
root
20
0
0
0
0
S
0.0
0.0
0
:
00.02
kthreadd
.
.
.
.
|
在top中也可以查看进程(进程)在哪个CPU上执行的。
执行top后,按f,按j(选中* J: P = Last used cpu (SMP)),然后按空格或回车退出设置,在top的显示中会多出P这一列是最近一次运行该线程(进程)的CPU.
1
2
3
4
5
6
|
PID
USER
PR
NI
VIRT
RES
SHR
S
%
CPU
%
MEM
TIME
+
P
COMMAND
10661
root
20
0
1313m
188m
2752
S
2.3
4.9
0
:
44.24
3
qemu
-
system
-
x86
10660
root
20
0
1313m
188m
2752
S
2.0
4.9
0
:
51.74
0
qemu
-
system
-
x86
10874
root
20
0
15260
1284
860
R
0.7
0.0
0
:
00.32
2
top
1
root
20
0
19444
1560
1252
S
0.0
0.0
0
:
00.34
0
init
2
root
20
0
0
0
0
S
0.0
0.0
0
:
00.02
1
kthreadd
|
更多信息,请 man pstree, man top, man ps 查看帮助文档。
注: LWP为轻量级进程(即:线程),(light weight process, or thread) 。