เหตุใด 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

เกิดอะไรขึ้นและฉันควรจะเชื่ออะไร


คำถามอยู่ที่ไหน
Vinz

คำตอบ:


10

พวกเขากำลังแสดงข้อมูลเดียวกันในรูปแบบที่แตกต่างกัน นี่คือสิ่งที่-fและ-Lตัวเลือกในการpsทำ (จากman ps, เน้นที่เหมือง):

-f ทำรายการเต็มรูปแบบ ตัวเลือกนี้สามารถรวมกับตัวเลือกสไตล์ UNIX อื่น ๆ เพื่อเพิ่มคอลัมน์เพิ่มเติม นอกจากนี้ยังทำให้อาร์กิวเมนต์คำสั่งถูกพิมพ์ เมื่อใช้กับ -L คอลัมน์ NLWP (จำนวนเธรด) และ LWP (ID เธรด) จะถูกเพิ่ม

-L แสดงหัวข้ออาจมีคอลัมน์ LWP และ NLWP

tid TID หมายเลขเฉพาะที่แสดงถึงเอนทิตีที่แจกจ่ายได้ (นามแฝง lwp, spid) ค่านี้อาจปรากฏเป็น: รหัสกระบวนการ (pid); ID กลุ่มกระบวนการ (pgrp); ID เซสชันสำหรับผู้นำเซสชัน (sid); ID กลุ่มเธรดสำหรับผู้นำกลุ่มเธรด (tgid); และ ID กลุ่มกระบวนการ tty สำหรับหัวหน้ากลุ่มกระบวนการ (tpgid)


ดังนั้นpsจะแสดงรหัสด้ายในLWPคอลัมน์ในขณะที่PIDคอลัมน์เป็นจริงระบุกระบวนการ

topบนมืออื่น ๆ ที่แสดงรายการหัวข้อที่แตกต่างกันในคอลัมน์แม้ว่าฉันไม่สามารถหาการกล่าวถึงอย่างชัดเจนในเรื่องนี้PIDman top


2

มันเป็นเพียงความแตกต่างในการนำเสนอ ดูLWPคอลัมน์ในpsผลลัพธ์ของคุณ- LWPคือLight WแปดProcess เคอร์เนลสามารถแยกความแตกต่างระหว่างกระบวนการเต็มรูปแบบและเธรด แต่ก็ยังต้องกำหนดเวลาให้เป็นอิสระ (นั่นคือจุดประสงค์ของเธรด) ด้วยกลไกเดียวกันกับที่ใช้ในการกำหนดตารางกระบวนการและเพื่อให้ id ของตัวกำหนดตารางเวลา ทำได้ดีที่สุดโดยมีกลุ่มกระบวนการเดียวและรหัสเธรดสำหรับทุกวัตถุประสงค์และใช้วิธีอื่นเพื่อบอกความแตกต่างทั้งสองอย่าง


-2

คุณเห็นกระบวนการหลัก1424ซึ่งเป็นกระบวนการที่สร้างกระบวนการลูกหนึ่งรายการขึ้นไป ( the other PIDs)


1
พวกเขาไม่ใช่กระบวนการลูกพวกเขากำลังเคอร์เนลเธรดของกระบวนการเดียวกัน
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.