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
(問題を説明して表示するために-pでtopを使用しました)。
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
。詳細についてはをご覧ください。