`ps`でスレッド/ LWPに関する情報を一覧表示するには?

`ps`でスレッド/ LWPに関する情報を一覧表示するには?

スレッド/ 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

関連情報