topとpsが同じプロセスに対して異なるPIDを表示するのはなぜですか?


11

を実行するtop -Hと、複数のmysqlスレッドがすべて同じPIDを持っていることがわかります。ただし、ps -eLf私はそれぞれに異なるPIDがあることを確認します。

ps -eLf

UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
mysql     1424     1  1424  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1481  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1482  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1483  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1484  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1485  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1486  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1487  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1488  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1489  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1490  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1791  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1792  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1793  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1794  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1809  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1812  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld

そして top -H

PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
 1424 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.08 mysqld                                                                  
 1481 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.16 mysqld                                                                  
 1482 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.33 mysqld                                                                  
 1483 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.16 mysqld                                                                  
 1484 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.23 mysqld                                                                  
 1485 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.27 mysqld                                                                  
 1486 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.15 mysqld                                                                  
 1487 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.18 mysqld                                                                  
 1488 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.16 mysqld                                                                  
 1489 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.16 mysqld                                                                  
 1490 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.34 mysqld                                                                  
 1791 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.26 mysqld                                                                  
 1792 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.54 mysqld                                                                  
 1793 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.00 mysqld                                                                  
 1794 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.00 mysqld                                                                  
 1809 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.00 mysqld                                                                  
 1812 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.13 mysqld

何が起こっているのか、どれを信じればよいのでしょうか?


質問はどこですか?
ビンツ2013年

回答:


10

実際には、同じ情報をさまざまな方法で表示しています。これは何をすべきか-f-Lオプションpsです(からman ps、強調鉱山):

-fフルフォーマットのリストを表示します。このオプションを他の多くのUNIXスタイルのオプションと組み合わせて、列を追加できます。また、コマンド引数が出力されます。-Lとともに使用すると、NLWP(スレッド数)およびLWP(スレッドID)列が追加されます。

-Lスレッドを表示します。LWP列とNLWP列がある場合があります。

tid TIDは、ディスパッチ可能なエンティティを表す一意の番号です(別名lwp、spid)。この値は次のように表示されることもあります。プロセスID(pid)。プロセスグループID(pgrp)。セッションリーダー(sid)のセッションID。スレッドグループリーダー(tgid)のスレッドグループID。そして、プロセスグループリーダー(tpgid)のttyプロセスグループID。


したがって、列が実際のプロセス識別子である間、列にpsスレッドIDが表示されます。LWPPID

top一方、PID列にさまざまなスレッドをリストしますが、これについての明示的な言及はにはありませんman top


2

プレゼンテーションの違いです。見てLWPあなたのコラムps出力は- LWPですLIGHT W8 Process。カーネルは完全なプロセスとスレッドを区別できますが、プロセスのスケジュールに使用するのと同じメカニズムで独立して(スレッドの目的で)それらを個別にスケジュールする必要があるため、スケジューラが認識するIDのIDは一意である必要があります。あらゆる目的のためにプロセスとスレッドIDの単一のプールを用意し、他の方法を使用して2種類を区別することで最もよく達成されます。


-2

親プロセス1424、1つ以上の子プロセスを作成したプロセス(the other PIDs)が表示されます。


1
これらは子プロセスではなく、同じプロセスのカーネルスレッドです。
Gilles「SO-邪悪なこと
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.