Process-Management
為什麼 top 和 ps 為相同的程序顯示不同的 PID?
當我執行時
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
發生了什麼事,我應該相信哪一個?
它們實際上以不同的方式顯示相同的資訊。這是要做的
-f
和-L
選項ps
(來自man ps
,強調我的):-f 進行全格式列表。此選項可以與許多其他 UNIX 樣式選項結合使用以添加其他列。它還會導致列印命令參數。與 -L 一起使用時,將添加 NLWP(執行緒數)和 LWP(執行緒 ID)列。
-L 顯示執行緒,可能帶有 LWP 和 NLWP 列。
tid TID 表示可驅逐實體的唯一編號(別名 lwp、spid)。該值也可能顯示為:程序 ID (pid);程序組 ID (pgrp);會話負責人 (sid) 的會話 ID;執行緒組負責人的執行緒組 ID (tgid);以及程序組負責人 (tpgid) 的 tty 程序組 ID。
因此,
ps
將在列中顯示執行緒 ID,LWP
而PID
列是實際的程序標識符。
top
另一方面,在PID
列中列出了不同的執行緒,儘管我在man top
.