Ps

top 為同一程序的執行緒顯示不同的 pid。如何解決?

  • December 28, 2021

當我執行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


現在,當我對tophtop執行相同操作時,我看到每個執行緒的 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,您需要列(通過> ColumnsTGID添加它)。同名的top裡面也有,但是不知道top怎麼配置。F2

Linux“程序”實際上只是執行緒組(或任務組),而top/htop中的“PID”列實際上顯示了執行緒ID(任務ID)。相同的clone(2)系統呼叫用於創建兩者——查看關於CLONE_THREAD.

引用自:https://unix.stackexchange.com/questions/684182