顶部显示同一进程的线程的不同 pid。如何修复它?

顶部显示同一进程的线程的不同 pid。如何修复它?

当我执行 a 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


现在当我做同样的事情时顶部或者顶部,我看到每个线程都有不同的 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 )时为所有线程获取相同 PID 的任何指南。正如我所观察到的, htop 也有同样的问题)。

给出@user1686 的答案,使用 TGID 列。我想知道线程的 PID 指的是什么。

答案1

使用 htop,您需要列(通过>TGID添加它F2)。它也可以在同名的top中使用,但我不知道如何配置top。

Linux“进程”实际上只是线程组(或任务组),top/htop 中的“PID”列实际上显示了线程 ID(任务 ID)。相同克隆(2)系统调用用于创建两者 - 查看有关CLONE_THREAD.

相关内容