pstree 是一個能夠以樹狀圖的方式顯示系統中行程(Process)之間相關性的指令。通常,在一個系統中同時運行著多個行程,這些行程之間可能存在著不同的層級和相依關係。而 pstree 的優勢在於,它能夠將這些行程的相互關係以直觀的樹狀結構呈現,讓我們更容易理解。




嗨,大家好!今天我們要來談論一個在 Linux 系統中非常有用的指令:pstree。你是否曾經想過如何更清晰地了解系統中各個行程之間的相關性呢?那麼,就讓我們一起來探索這個強大的指令吧!

什麼是 pstree?

pstree 是一個能夠以樹狀圖的方式顯示系統中行程(Process)之間相關性的指令。通常,在一個系統中同時運行著多個行程,這些行程之間可能存在著不同的層級和相依關係。而 pstree 的優勢在於,它能夠將這些行程的相互關係以直觀的樹狀結構呈現,讓我們更容易理解。

安裝 pstree(如果需要的話)

大多數 Linux 系統預先安裝了 pstree,但如果你的系統沒有安裝,你可以通過包管理器來進行安裝。比如,在 Ubuntu 上,你可以運行以下命令來安裝 pstree

sudo apt-get install pstree

使用 pstree 來視覺化行程

  • -p:在每個行程名稱後面顯示該行程的 PID。
  • -h:這將在目前正在執行的行程名稱前面加上顏色高亮標記,以便更容易識別。
  • -u:在每個行程名稱後面顯示該行程的擁有者使用者名稱。
  • -a:在每個行程名稱後面顯示該行程的命令行參數。
  • -c:在每個行程名稱後面顯示該行程的類別名稱。
  • -g:在每個行程名稱後面顯示該行程所屬的行程群組。
  • -s:在每個行程名稱後面顯示該行程所屬的會話。

pstree

輸入指令 pstree 這將會顯示出整個行程樹狀結構,包括根行程(通常是 initsystemd)以及它們的子行程。每個行程都會以名稱的方式呈現,並且子行程會縮進以顯示其階層關係。

systemd(1)─┬─accounts-daemon(1284)
           ├─acpid(1001)
           ├─agetty(1021)
           ├─atd(1033)
           ├─...

pstree -h

輸入指令 pstree -h 可以讓你在目前正在執行的行程名稱前面加上顏色高亮標記,以便更容易識別

systemd─┬─accounts-daemon───2*[{accounts-daemon}]
        ├─acpid
        ├─agetty
        ├─atd
        ├─cron
        ├─...
        └─sshd─┬─sshd───sshd───bash
               └─sshd───sshd───bash───pstree

pstree -u

輸入指令 pstree -u 可以讓你在每個行程名稱後面顯示該行程的擁有者使用者名稱

systemd───┬─accounts-daemon(user)
          ├─acpid(root)
          ├─agetty(root)
          ├─atd(root)
          ├─...

pstree -a

輸入指令 pstree -a 可以讓在每個行程名稱後面顯示該行程的命令行參數

systemd(1)─┬─accounts-daemon(1284)───2*[{accounts-daemon}]
           ├─acpid(1001)
           ├─agetty(1021)
           ├─atd(1033)
           ├─...

pstree -np

輸入指令 pstree -np 可以讓你快速地查看系統中運行的行程佈局,同時獲取每個行程的識別碼。這對於識別特定行程、追蹤行程相關性或進行系統監控都非常有用。

  • -n:用於以行程的 PID 來排序輸出,而不是預設的以行程名稱排序。
  • -p:在每個行程名稱後面顯示該行程的 PID。
systemd(1)─┬─accounts-daemon(1284)───2*[{accounts-daemon}]
           ├─acpid(1001)
           ├─agetty(1021)
           ├─atd(1033)
           ├─...

pstree {user}

pstree {user}:這個指令的 {user} 部分應該替換為你要查詢的特定使用者的名稱。這個指令將會顯示該使用者所運行的行程樹狀結構。

systemd───┬─user@1000.service─┬─gnome-terminal─┬─bash───pstree
          │                    │                ├─bash───ls
          │                    │                ├─bash───vi
          │                    │                └─2*[{gnome-terminal-}]
          │                    ├─dbus-daemon
          │                    ├─dconf-service───2*[{dconf-service}]
          │                    ├─evolution-calen───2*[{evolution-calen}]
          │                    ├─evolution-sourc───2*[{evolution-sourc}]
          │                    ├─gnome-keyring-d───3*[{gnome-keyring-d}]
          │                    ├─gvfs-afc-volume───2*[{gvfs-afc-volume}]
          │                    ├─gvfs-daemon───{gvfs-daemon}
          │                    ├─gvfs-goa-volume───2*[{gvfs-goa-volume}]
          │                    ├─gvfs-metadata───{gvfs-metadata}
          │                    ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
          │                    ├─gvfsd
          │                    ├─ibus-daemon─┬─ibus-dconf───2*[{ibus-dconf}]
          │                    │             ├─ibus-engine-sim───2*[{ibus-engine-sim}]
          │                    │             ├─ibus-extension-───2*[{ibus-extension-}]
          │                    │             ├─ibus-memconf───2*[{ibus-memconf}]
          │                    │             ├─ibus-ui-gtk3───2*[{ibus-ui-gtk3}]
          │                    │             └─3*[{ibus-daemon}]
          │                    ├─mission-control───3*[{mission-control}]
          │                    ├─nautilus───2*[{nautilus}]
          │                    ├─nm-applet───2*[{nm-applet}]
          │                    ├─pulseaudio───2*[{pulseaudio}]
          │                    ├─ssh-agent
          │                    ├─tracker-miner-a───2*[{tracker-miner-a}]
          │                    ├─tracker-store───5*[{tracker-store}]
          │                    ├─xdg-desktop-por───3*[{xdg-desktop-por}]
          │                    └─xdg-document-po───2*[{xdg-document-po}]
          └─{user}@1000.servi

pstree -p {pid}

pstree -p {pid}:這個指令的 {pid} 部分應該替換為你想要查詢的特定行程的 PID。這個指令將會顯示該 PID 及其所有子行程的行程樹狀結構。

假設你想要查詢 PID 為 1234 的行程及其子行程的層次結構,下面是可能的輸出範例:

systemd(1)─┬─accounts-daemon(1284)
           ├─acpid(1001)
           ├─agetty(1021)
           ├─atd(1033)
           ├─...
           └─sshd(1234)─┬─sshd───sshd───bash
                       └─sshd───sshd───bash───pstree

常見問題解答

通過 pstree 指令,您可以輕鬆地在 Linux 系統上視覺化行程之間的相依關係,而無需對複雜的命令列輸出感到困惑。這將使您更容易瞭解系統中各個行程的運作方式,從而有助於進行優化和故障排除。

  1. pstree 是否可以顯示行程的資源使用情況?
    • 不,pstree 主要用於顯示行程之間的相依關係,並不會提供有關資源使用情況的資訊。
  2. pstree 能夠顯示隱藏的行程嗎?
    • 否,pstree 只會顯示您的使用者可見的行程,不會顯示隱藏的系統行程。
  3. 我可以將 pstree 的輸出儲存到檔案中嗎?
    • 是的,您可以使用重定向來將 pstree 的輸出儲存到檔案中。例如,pstree > output.txt 將輸出存儲到名為 output.txt 的檔案中。
  4. pstree 的輸出是否會即時更新?
    • 否,pstree 的輸出是一次性的靜態快照,不會自動即時更新行程的狀態。

現在,您可以立即在您的 Linux 系統上嘗試一下 pstree 指令,探索行程之間的聯繫,並深入了解系統的運行情況。

延伸閱讀:如何在 Linux 遠端同步與備份 ? 使用 rsync 的教學與 crontab 定期備份與排程範例

延伸閱讀:chmod 是什麼 ? 5分鐘學會 Linux 檔案權限設定


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *