当我执行ps -efT
(where -T
= Show threads, possibly with SPID column.
) 时,我看到所有线程都具有相同的 PID,这与预期的一样。
myroot 24958 24958 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24959 7942 0 20:20 pts/12 00:00:11 java -jar myapp.jar
myroot 24958 24960 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24961 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24962 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24963 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24964 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
myroot 24958 24965 7942 0 20:20 pts/12 00:00:00 java -jar myapp.jar
如上所示,所有线程共享/显示相同的 PID 24958
。
现在,当我对top或htop执行相同操作时,我看到每个线程的 pid 不同,这让我很困扰。有没有办法为所有线程显示相同的 PID。下面是缩减后的输出top -H -p 24958
(我将 top 与 -p 一起使用,所以我可以解释并显示问题)
top - 21:42:44 up 9 days, 18:38, 0 users, load average: 0.00, 0.26, 0.82
Threads: 32 total, 0 running, 32 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 12542.5 total, 10135.3 free, 826.8 used, 1580.4 buff/cache
MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 11439.4 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24958 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:00.00 java
24959 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:11.99 java
24960 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:00.43 GC Thread#0
24961 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:00.00 G1 Main Marker
24962 myroot 20 0 7036228 340720 21084 S 0.0 2.7 0:00.00 G1 Conc#0
--and few more threads.
当我使用时top -H
,除非我看到所有线程都具有相同的 PID,否则我无法说出所有线程属于同一进程。
关于如何在使用 top(或 htop。正如我所观察到的那样,htop 也有同样的问题)时为所有线程获得相同 PID 的任何指南。
给定@user1686 使用 TGID 列的答案。我想知道线程的 PID 指的是什么。
使用 htop,您需要列(通过> Columns
TGID
添加它)。同名的top里面也有,但是不知道top怎么配置。F2Linux“进程”实际上只是线程组(或任务组),而top/htop中的“PID”列实际上显示了线程ID(任务ID)。相同的clone(2)系统调用用于创建两者——查看关于
CLONE_THREAD
.