スレッド/ LWPに関する情報を一覧表示するにはps
?
なぜ私はこれを行うことができないのですか?
$ ps 10173
PID TTY STAT TIME COMMAND
$ ps -L 10173
PID LWP TTY STAT TIME COMMAND
私ができる最善
$ ps -eL | grep 10173
10172 10173 pts/8 00:00:00 java
LWPだから
$ ps -L 10172
PID LWP TTY STAT TIME COMMAND
10172 10172 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10173 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10174 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10175 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10176 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10177 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10178 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10179 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10180 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10181 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10182 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10183 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10184 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10185 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10186 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10187 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10188 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10189 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
10172 10190 pts/8 Tl 0:00 java -cp target com.mycompany.app.Main
そして
$ pstree -pau -l -G -s 10172
systemd,1 splash
└─lxterminal,3194,t
└─bash,12150
└─java,10172 -cp target com.mycompany.app.Main
├─{java},10173
├─{java},10174
├─{java},10175
├─{java},10176
├─{java},10177
├─{java},10178
├─{java},10179
├─{java},10180
├─{java},10181
├─{java},10182
├─{java},10183
├─{java},10184
├─{java},10185
├─{java},10186
├─{java},10187
├─{java},10188
├─{java},10189
└─{java},10190
ありがとうございます。
答え1
LWPプロセスのみを表示するには、次のようにps -e -q 10172
します。関連するすべてのスレッドを表示するには:ps -eL -q 10172
たとえば、マイコンピュータにはrsyslog
次のスレッドがあります。
PID LWP TTY TIME CMD
22316 22316 ? 00:00:00 rsyslogd
22316 22318 ? 00:02:23 in:imjournal
22316 22319 ? 00:00:00 in:imudp
22316 22320 ? 00:00:07 in:imtcp
22316 22321 ? 00:00:00 in:imtcp
22316 22322 ? 00:00:00 in:imtcp
22316 22323 ? 00:00:00 in:imtcp
22316 22324 ? 00:00:00 in:imtcp
22316 22325 ? 00:00:24 rs:main Q:Reg
スレッドが表示されます(例:22320)。
% ps -e -q 22320
PID TTY TIME CMD
22316 ? 00:02:55 in:imtcp
プロセスのデフォルトPIDが表示されます。
このスレッドのすべての関連プロセスを表示できます。
% ps -eL -q 22320
PID LWP TTY TIME CMD
22316 22316 ? 00:00:00 rsyslogd
22316 22318 ? 00:02:23 in:imjournal
22316 22319 ? 00:00:00 in:imudp
22316 22320 ? 00:00:07 in:imtcp
22316 22321 ? 00:00:00 in:imtcp
22316 22322 ? 00:00:00 in:imtcp
22316 22323 ? 00:00:00 in:imtcp
22316 22324 ? 00:00:00 in:imtcp
22316 22325 ? 00:00:24 rs:main Q:Reg
答え2
LWPまたはスレッドIDを見つけるもう一つの方法です。
2つのサンプルファイルa.txtとb.txtのviエディタを開きます。
[root@docker ~]# ps -aux | head -1;ps -aux| egrep "2663|2662" | grep -v grep
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2662 0.0 0.0 120660 2988 pts/2 S+ 09:44 0:00 vim a.txt
root 2663 0.0 0.0 120660 2988 pts/1 S+ 09:44 0:00 vim b.txt
LWP = 軽量プロセスまたはスレッド ID NLWP = 軽量プロセスの数
[root@docker ~]# ps -eLf | head -1; ps -eLf | egrep "2662|2663" |grep -v grep
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 2662 2624 2662 0 1 09:44 pts/2 00:00:00 vim a.txt
root 2663 2582 2663 0 1 09:44 pts/1 00:00:00 vim b.txt
PID「2662 | 2663」のスレッドID(LWP)「2662 | 2663」をそれぞれ表示できます。
[root@docker ~]# pstree -pau -l -G -s 2662
systemd,1 --switched-root --system --deserialize 22
mqsshd,1197 -D
mqsshd,2566
mqbash,2624
mqvim,2662 a.txt
[root@docker ~]# pstree -pau -l -G -s 2663
systemd,1 --switched-root --system --deserialize 22
mqsshd,1197 -D
mqsshd,2564
mqbash,2582
mqvim,2663 b.txt
今回は別の例を挙げましょう。
[root@localhost ~]# ps -efL
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 1470 1 1470 0 19 11:25 ? 00:00:11 /opt/mongodb-linux-x86_64-rhel62-3.0.4/bin/mongod --bind_ip 10.12.1.132 --dbpath /mnt/mongodb_data --fork --logpath /mnt/mongodb.log
root 1470 1 1471 0 19 11:25 ? 00:00:00 /opt/mongodb-linux-x86_64-rhel62-3.0.4/bin/mongod --bind_ip 10.12.1.132 --dbpath /mnt/mongodb_data --fork --logpath /mnt/mongodb.log
root 1470 1 1472 0 19 11:25 ? 00:00:00 /opt/mongodb-linux-x86_64-rhel62-3.0.4/bin/mongod --bind_ip 10.12.1.132 --dbpath /mnt/mongodb_data --fork --logpath /mnt/mongodb.log
root 1470 1 1473 0 19 11:25 ? 00:00:00 /opt/mongodb-linux-x86_64-rhel62-3.0.4/bin/mongod --bind_ip 10.12.1.132 --dbpath /mnt/mongodb_data --fork --logpath /mnt/mongodb.log
root 1470 1 1474 0 19 11:25 ? 00:00:06 /opt/mongodb-linux-x86_64-rhel62-3.0.4/bin/mongod --bind_ip 10.12.1.132 --dbpath /mnt/mongodb_data --fork --logpath /mnt/mongodb.log
上記の出力でこれらのすべてのプロセスのPID番号(1470)が同じであることがわかります。ただし、固有のスレッドID番号(1470、1471、1472、1473、1474)があります。
Linuxでは、これらのスレッドID番号はLWPとして表示されます(psコマンド列名もLWPです)。 LWPとは軽量製作(Lightweight Crafting)を意味します。
実際、Linuxでは、すべてのプログラムに少なくとも1つのスレッドがあります。
[root@docker ~]# ps axms | head -1; ps axms |egrep "2662|2663" | grep -v grep
UID PID PENDING BLOCKED IGNORED CAUGHT STAT TTY TIME COMMAND
0 2662 0000000000000000 - - - - pts/2 0:00 vim a.txt
0 2663 0000000000000000 - - - - pts/1 0:00 vim b.txt