1. 程式人生 > >Linux 中 4 個簡單的找出程序 ID(PID)的方法 | Linux 中國

Linux 中 4 個簡單的找出程序 ID(PID)的方法 | Linux 中國

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1每個人都知道 PID,究竟什麼是 PID?為什麼你想要 PID?你打算用 PID 做什麼?你腦子裡有同樣的問題嗎?如果是這樣,你就找對地方瞭解這些細節了。-- Magesh Maruthamuthu
本文導航◈ 什麼是程序 ID?08%◈ 方法 1:使用 pidof 命令30%◈ 方法 2:使用 pgrep 命令41%◈ 方法 3:使用 pstree 命令52%◈ 方法 4:使用 ps 命令69%編譯自 | https://www.2daygeek.com/how-to-check-find-the-process-id-pid-ppid-of-a-running-program-in-linux/ 
 作者 | Magesh Maruthamuthu

 譯者 | geekpi

每個人都知道 PID,究竟什麼是 PID?為什麼你想要 PID?你打算用 PID 做什麼?你腦子裡有同樣的問題嗎?如果是這樣,你就找對地方瞭解這些細節了。

我們查詢 PID 主要是用來殺死一個沒有響應的程式,它類似於 Windows 工作管理員一樣。 Linux GUI 也提供相同的功能,但 CLI 是執行 kill 操作的有效方法。

什麼是程序 ID?

PID 代表程序標識號process identification,它在大多數作業系統核心(如 Linux、Unix、macOS 和 Windows)中使用。它是在作業系統中建立時自動分配給每個程序的唯一標識號。一個程序是一個正在執行的程式例項。

建議閱讀: 如何檢視 Apache Web 伺服器在 Linux 中的執行時間[1]

除了 init 程序外其他所有的程序 ID 每次都會改變,因為 init 始終是系統上的第一個程序,並且是所有其他程序的父程序。它的 PID 是 1。

PID 預設的最大值是 32768。可以在你的系統上執行 cat /proc/sys/kernel/pid_max 來驗證。在 32 位系統上,32768 是最大值,但是我們可以在 64 位系統上將其設定為最大 222(約 4 百萬)內的任何值。

你可能會問,為什麼我們需要這麼多的 PID?因為我們不能立即重用 PID,這就是為什麼。另外為了防止可能的錯誤。

系統正在執行的程序的 PID 可以通過使用 pidof

pgrepps 和 pstree 命令找到。

方法 1:使用 pidof 命令

pidof 用於查詢正在執行的程式的程序 ID。它在標準輸出上列印這些 id。為了演示,我們將在 Debian 9(stretch)系統中找出 Apache2 的程序 ID。

  1. #pidof apache2

  2. 3754259423652364236323622361

從上面的輸出中,你可能會遇到難以識別程序 ID 的問題,因為它通過程序名稱顯示了所有的 PID(包括父程序和子程序)。因此,我們需要找出父 PID(PPID),這是我們要查詢的。它可能是第一個數字。在本例中,它是 3754,並按降序排列。

方法 2:使用 pgrep 命令

pgrep 遍歷當前正在執行的程序,並將符合選擇條件的程序 ID 列到標準輸出中。

  1. #pgrep apache2

  2. 2361

  3. 2362

  4. 2363

  5. 2364

  6. 2365

  7. 2594

  8. 3754

這也與上面的輸出類似,但是它將結果從小到大排序,這清楚地說明父 PID 是最後一個。在本例中,它是 3754

注意: 如果你有多個程序的程序 ID,那麼在使用 pidof 和 pgrep 識別父程序 ID 時就可能不會很順利。

方法 3:使用 pstree 命令

pstree 將執行的程序顯示為一棵樹。樹的根是某個 pid,如果省略了 pid 引數,那麼就是 init。如果在 pstree 命令中指定了使用者名稱,則顯示相應使用者擁有的所有程序。

pstree 會將相同的分支放在方括號中,並新增重複計數的字首來視覺化地合併到一起。

  1. #pstree-p |grep"apache2"

  2. |- apache2(3754)-|-apache2(2361)

  3. ||-apache2(2362)

  4. ||-apache2(2363)

  5. ||-apache2(2364)

  6. ||-apache2(2365)

  7. |`-apache2(2594)

要單獨獲取父程序,請使用以下格式。

  1. #pstree-p |grep"apache2"|head-1

  2. |- apache2(3754)-|-apache2(2361)

pstree 命令非常簡單,因為它分別隔離了父程序和子程序,但這在使用 pidof 和 pgrep 時命令不容易做到。

方法 4:使用 ps 命令

ps 顯示活動程序的選擇資訊。它顯示程序 ID(pid=PID)、與程序關聯的終端(tname=TTY)、以 [DD-]hh:mm:ss 格式(time=TIME)顯示的累計 CPU 時間、以及執行名(ucmd = CMD)。輸出預設是未排序的。

  1. #ps aux |grep"apache2"

  2. www-data 23610.00.43026529732? S 06:250:00/usr/sbin/apache2 -k start

  3. www-data 23620.00.43026529732? S 06:250:00/usr/sbin/apache2 -k start

  4. www-data 23630.00.43026529732? S 06:250:00/usr/sbin/apache2 -k start

  5. www-data 23640.00.43026529732? S 06:250:00/usr/sbin/apache2 -k start

  6. www-data 23650.00.43026528400? S 06:250:00/usr/sbin/apache2 -k start

  7. www-data 25940.00.43026528400? S 06:550:00/usr/sbin/apache2 -k start

  8. root 37540.01.430258029324?SsDec110:23/usr/sbin/apache2 -k start

  9. root 56480.00.012784940 pts/0 S+21:320:00grep apache2

從上面的輸出中,我們可以根據程序的啟動日期輕鬆地識別父程序 ID(PPID)。在此例中,apache2 啟動於 Dec 11,它是父程序,其他的是子程序。apache2 的 PID 是 3754

via: https://www.2daygeek.com/how-to-check-find-the-process-id-pid-ppid-of-a-running-program-in-linux/

作者:Magesh Maruthamuthu[3] 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者640?wx_fmt=pnggeekpi ? ?共計翻譯:654 篇貢獻時間:1569 天

推薦文章

< 左右滑動檢視相關文章 >

640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png640?wx_fmt=gif640?wx_fmt=gif

點選圖片、輸入文章 ID 或識別二維碼直達

原文連結請訪問“原文連結”獲得可點選的文內連結、全尺寸原圖和相關文章。