Ps
top 為同一程序的執行緒顯示不同的 pid。如何解決?
當我執行
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怎麼配置。F2
Linux“程序”實際上只是執行緒組(或任務組),而top/htop中的“PID”列實際上顯示了執行緒ID(任務ID)。相同的clone(2)系統呼叫用於創建兩者——查看關於
CLONE_THREAD
.