Lệnh pstree trong Linux hiển thị cây tiến trình, giúp bạn dễ dàng hình dung mối quan hệ cha-con giữa các tiến trình đang chạy. Nó trình bày các tiến trình dưới dạng cấu trúc cây, bắt đầu từ init hoặc systemd, cho thấy sự phân cấp rõ ràng. Sử dụng pstree để nhanh chóng xác định tiến trình nào đang tạo ra tiến trình con nào, hỗ trợ gỡ lỗi và quản lý hệ thống hiệu quả.
Lệnh pstree trong linux là gì?
Lệnh command pstree in linux là một công cụ dòng lệnh mạnh mẽ, giúp hiển thị các tiến trình đang chạy trên hệ thống dưới dạng cây phân cấp trực quan. Nó cho phép người dùng dễ dàng theo dõi mối quan hệ cha-con giữa các tiến trình, từ đó hiểu rõ hơn về cách hệ thống đang hoạt động. Sử dụng pstree, bạn có thể nhanh chóng xác định tiến trình nào đang tạo ra tiến trình con nào, rất hữu ích cho việc gỡ lỗi và giám sát hệ thống. Ngoài ra, pstree còn hỗ trợ nhiều tùy chọn để tùy chỉnh hiển thị, ví dụ như hiển thị PID hoặc nhóm các tiến trình giống nhau. Đây là một công cụ không thể thiếu cho bất kỳ người dùng Linux nào muốn nắm bắt sâu sắc về quản lý tiến trình.
Tìm hiểu về lệnh pstree
Trong bước này, chúng ta sẽ tìm hiểu về lệnh pstree, một công cụ hữu ích để hình dung hệ thống phân cấp tiến trình trên Linux.
Lệnh pstree hiển thị dạng cây các tiến trình đang chạy, thể hiện quan hệ cha-con giữa chúng. Điều này giúp bạn hiểu cấu trúc và sự phụ thuộc của các tiến trình hệ thống.
Để bắt đầu, hãy chạy lệnh pstree trong terminal để xem kết quả hiển thị nhé:
$ pstree
systemd─┬─ModemManager─┬─dhclient
│ └─2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─apache2─┬─apache2
│ └─2*[apache2]
├─atd
├─cron
├─dbus-daemon
├─dockerd─┬─containerd─┬─containerd-shim─┬─bash
│ │ │ └─3*[{containerd-shim}]
│ │ └─6*[{containerd}]
│ └─7*[{dockerd}]
├─gdm3─┬─Xorg
│ └─gnome-session-b─┬─gnome-shell
│ ├─ibus-daemon─┬─ibus-engine-sim
│ │ └─2*[{ibus-daemon}]
│ └─2*[{gnome-session-b}]
├─irqbalance
├─kerneloops
├─kube-proxy
├─kubelet
├─lightdm─┬─Xorg
│ └─lightdm───sh───fluxbox
├─lxcfs
├─lxd─┬─lxd
│ └─2*[{lxd}]
├─polkitd───2*[{polkitd}]
├─rsyslogd
├─snapd───10*[{snapd}]
├─ssh-agent
├─systemd-journal
├─systemd-logind
├─systemd-networkd
├─systemd-resolve
├─systemd-timesyn
├─systemd-udevd
├─udisksd───3*[{udisksd}]
├─unattended-upgr───2*[{unattended-upgr}]
├─upowerd───2*[{upowerd}]
├─user-manager───3*[{user-manager}]
└─whoopsie───2*[{whoopsie}]
Kết quả cho thấy dạng cây phân cấp của các tiến trình đang chạy, với systemd ở trên cùng, là tiến trình cha của nhiều tiến trình khác.
Bạn có thể tùy chỉnh đầu ra của pstree bằng nhiều tùy chọn khác nhau. Ví dụ, để chỉ hiển thị ID tiến trình (PID) thay vì tên, hãy dùng tùy chọn -p:
$ pstree -p
systemd(1)─┬─ModemManager(577)─┬─dhclient(593)
│ └─2*[{ModemManager}(580,581)]
├─NetworkManager(572)─┬─dhclient(590)
│ └─2*[{NetworkManager}(573,574)]
├─accounts-daemon(531)───2*[{accounts-daemon}(532,533)]
├─apache2(688)─┬─apache2(689)
│ └─2*[apache2(690,691)]
├─atd(544)
├─cron(545)
├─dbus-daemon(530)
├─dockerd(688)─┬─containerd(701)─┬─containerd-shim(702)─┬─bash(703)
│ │ │ └─3*[{containerd-shim}(704,705,706)]
│ │ └─6*[{containerd}(707,708,709,710,711,712)]
│ └─7*[{dockerd}(689,690,691,692,693,694,695)]
├─gdm3(575)─┬─Xorg(586)
│ └─gnome-session-b(587)─┬─gnome-shell(588)
│ ├─ibus-daemon(589)─┬─ibus-engine-sim(592)
│ │ └─2*[{ibus-daemon}(590,591)]
│ └─2*[{gnome-session-b}(595,596)]
├─irqbalance(543)
├─kerneloops(546)
├─kube-proxy(697)
├─kubelet(696)
├─lightdm(576)─┬─Xorg(585)
│ └─lightdm(577)───sh(578)───fluxbox(579)
├─lxcfs(542)
├─lxd(698)─┬─lxd(699)
│ └─2*[{lxd}(700,701)]
├─polkitd(534)───2*[{polkitd}(535,536)]
├─rsyslogd(541)
├─snapd(694)───10*[{snapd}(695,696,697,698,699,700,701,702,703,704)]
├─ssh-agent(587)
├─systemd-journal(526)
├─systemd-logind(529)
├─systemd-networkd(527)
├─systemd-resolve(528)
├─systemd-timesyn(540)
├─systemd-udevd(525)
├─udisksd(537)───3*[{udisksd}(538,539,540)]
├─unattended-upgr(547)───2*[{unattended-upgr}(548,549)]
├─upowerd(535)───2*[{upowerd}(536,537)]
├─user-manager(586)───3*[{user-manager}(587,588,589)]
└─whoopsie(550)───2*[{whoopsie}(551,552)]
Lệnh này sẽ hiển thị ID của tiến trình thay vì tên của chúng.
Bạn cũng có thể dùng tùy chọn -u để hiển thị người dùng đang chạy mỗi tiến trình:
$ pstree -u
systemd─┬─ModemManager─┬─dhclient
│ └─2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─apache2─┬─apache2
│ └─2*[apache2]
├─atd
├─cron
├─dbus-daemon
├─dockerd─┬─containerd─┬─containerd-shim─┬─bash
│ │ │ └─3*[{containerd-shim}]
│ │ └─6*[{containerd}]
│ └─7*[{dockerd}]
├─gdm3─┬─Xorg
│ └─gnome-session-b─┬─gnome-shell
│ ├─ibus-daemon─┬─ibus-engine-sim
│ │ └─2*[{ibus-daemon}]
│ └─2*Khám phá Cấu trúc Phân cấp Tiến trình với pstree
Trong bước này, chúng ta sẽ tìm hiểu sâu hơn về cấu trúc phân cấp tiến trình bằng lệnh pstree. Chúng ta cũng sẽ khám phá các tùy chọn khác nhau để tùy chỉnh đầu ra.
Đầu tiên, hãy xem cách chúng ta có thể hiển thị cấu trúc phân cấp tiến trình một cách ngắn gọn hơn bằng tùy chọn -c:
$ pstree -c
systemd─┬─ModemManager─┬─dhclient
│ └─2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─apache2─┬─apache2
│ └─2*[apache2]
├─atd
├─cron
├─dbus-daemon
├─dockerd─┬─containerd─┬─containerd-shim─┬─bash
│ │ │ └─3*[{containerd-shim}]
│ │ └─6*[{containerd}]
│ └─7*[{dockerd}]
├─gdm3─┬─Xorg
│ └─gnome-session-b─┬─gnome-shell
│ ├─ibus-daemon─┬─ibus-engine-sim
│ │ └─2*[{ibus-daemon}]
│ └─2*[{gnome-session-b}]
├─irqbalance
├─kerneloops
├─kube-proxy
├─kubelet
├─lightdm─┬─Xorg
│ └─lightdm───sh───fluxbox
├─lxcfs
├─lxd─┬─lxd
│ └─2*[{lxd}]
├─polkitd───2*[{polkitd}]
├─rsyslogd
├─snapd───10*[{snapd}]
├─ssh-agent
├─systemd-journal
├─systemd-logind
├─systemd-networkd
├─systemd-resolve
├─systemd-timesyn
├─systemd-udevd
├─udisksd───3*[{udisksd}]
├─unattended-upgr───2*[{unattended-upgr}]
├─upowerd───2*[{upowerd}]
├─user-manager───3*[{user-manager}]
└─whoopsie───2*[{whoopsie}]
Tùy chọn -c giúp thu gọn đầu ra, giúp bạn dễ đọc và hiểu cấu trúc phân cấp tiến trình hơn.
Tiếp theo, hãy xem cách chúng ta có thể lọc đầu ra để tập trung vào các tiến trình cụ thể. Ví dụ: để chỉ hiển thị các tiến trình liên quan đến dịch vụ docker, ta dùng -a:
$ pstree -a | grep docker
dockerd─┬─containerd─┬─containerd-shim─┬─bash
│ │ └─3*[containerd-shim]
│ └─6*[containerd]
└─7*[dockerd]
Lệnh này hiển thị các tiến trình docker và các tiến trình con của chúng một cách rõ ràng.
Bạn cũng có thể sử dụng tùy chọn -p để hiển thị ID tiến trình (PID) thay vì tên tiến trình.
$ pstree -p | grep docker
dockerd(688)─┬─containerd(701)─┬─containerd-shim(702)─┬─bash(703)
│ │ └─3*[containerd-shim(704,705,706)]
│ └─6*[containerd(707,708,709,710,711,712)]
└─7*[dockerd(689,690,691,692,693,694,695)]
Điều này có thể hữu ích khi bạn cần xác định các tiến trình cụ thể bằng PID của chúng.
Cuối cùng, hãy xem cách chúng ta có thể hiển thị cấu trúc phân cấp tiến trình cho một người dùng cụ thể. Để thực hiện việc này, ta dùng tùy chọn -u, sau đó là tên người dùng:
$ pstree -u labex
systemd─┬─ModemManager─┬─dhclient
│ └─2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─apache2─┬─apache2
│ └─2*[apache2]
├─atd
├─cron
├─dbus-daemon
├─dockerd─┬─containerd─┬─containerd-shim─┬─bash
│ │ │ └─3*[{containerd-shim}]
│ │ └─6*[{containerd}]
│ └─7*[{dockerd}]
├─gdm3─┬─Xorg
│ └─gnome-session-b─┬─gnome-shell
│ ├─ibus-daemon─┬─ibus-engine-sim
│ │ └─2*[{ibus-daemon}]
│ └─2*[{gnome-session-b}]
├─irqbalance
├─kerneloops
├─kube-proxy
├─kubelet
├─lightdm─┬─Xorg
│ └─lightdm───sh───fluxbox
├─lxcfs
├─lxd─┬─lxd
│ └─2*[{lxd}]
├─polkitd───2*[{polkitd}]
├─rsyslogd
├─snapd───10*[{snapd}]
├─ssh-agent
├─systemd-journal
├─systemd-logind
├─systemd-networkd
├─systemd-resolve
├─systemd-timesyn
├─systemd-udevd
├─udisksd───3*[{udisksd}]
├─unattended-upgr───2*[{unattended-upgr}]
├─upowerd───2*[{upowerd}]
├─user-manager───3*[{user-manager}]
└─whoopsie───2*[{whoopsie}]
Lệnh này hiển thị cấu trúc phân cấp tiến trình cho người dùng labex một cách chi tiết.
Lệnh pstree cung cấp rất nhiều thông tin về cấu trúc phân cấp tiến trình trên hệ thống Linux của bạn. Bằng cách sử dụng các tùy chọn khác nhau, bạn có thể tùy chỉnh đầu ra cho phù hợp với nhu cầu và hiểu sâu hơn về các tiến trình của hệ thống.
Lọc và Tùy chỉnh Đầu ra của pstree
Trong bước cuối cùng này, chúng ta sẽ khám phá thêm các cách để lọc và tùy chỉnh đầu ra của lệnh pstree cho phù hợp với nhu cầu cụ thể.
Một trường hợp sử dụng phổ biến là tập trung vào một process hoặc process group cụ thể. Ví dụ: bạn muốn xem process hierarchy cho process systemd và các child process của nó. Bạn có thể sử dụng tùy chọn -s để thực hiện việc này:
$ pstree -s systemd
systemd
Lệnh này hiển thị process systemd và các child process trực tiếp của nó.
Bạn cũng có thể sử dụng tùy chọn -g để nhóm các process theo process group ID (PGID) thay vì process hierarchy:
$ pstree -g
1-systemd
├─577-ModemManager
│ ├─593-dhclient
│ └─2*[580-{ModemManager},581-{ModemManager}]
├─572-NetworkManager
│ ├─590-dhclient
│ └─2*[573-{NetworkManager},574-{NetworkManager}]
├─531-accounts-daemon
│ ├─532-{accounts-daemon}
│ └─533-{accounts-daemon}
├─688-apache2
│ ├─689-apache2
│ └─2*[690-apache2,691-apache2]
├─544-atd
├─545-cron
├─530-dbus-daemon
├─688-dockerd
│ ├─701-containerd
│ │ ├─702-containerd-shim
│ │ │ └─703-bash
│ │ └─6*[707-{containerd},708-{containerd},709-{containerd},710-{containerd},711-{containerd},712-{containerd}]
│ └─7*[689-{dockerd},690-{dockerd},691-{dockerd},692-{dockerd},693-{dockerd},694-{dockerd},695-{dockerd}]
├─575-gdm3
│ ├─586-Xorg
│ └─587-gnome-session-b
│ ├─588-gnome-shell
│ ├─589-ibus-daemon
│ │ ├─592-ibus-engine-sim
│ │ └─2*[590-{ibus-daemon},591-{ibus-daemon}]
│ └─2*[595-{gnome-session-b},596-{gnome-session-b}]
├─543-irqbalance
├─546-kerneloops
├─697-kube-proxy
├─696-kubelet
├─576-lightdm
│ ├─585-Xorg
│ └─577-lightdm
│ ├─578-sh
│ └─579-fluxbox
├─542-lxcfs
├─698-lxd
│ ├─699-lxd
│ └─2*[700-{lxd},701-{lxd}]
├─534-polkitd
│ ├─535-{polkitd}
│ └─536-{polkitd}
├─541-rsyslogd
├─694-snapd
│ └─10*[695-{snapd},696-{snapd},697-{snapd},698-{snapd},699-{snapd},700-{snapd},701-{snapd},702-{snapd},703-{snapd},704-{snapd}]
├─587-ssh-agent
├─526-systemd-journal
├─529-systemd-logind
├─527-systemd-networkd
├─528-systemd-resolve
├─540-systemd-timesyn
├─525-systemd-udevd
├─537-udisksd
│ ├─538-{udisksd}
│ ├─539-{udisksd}
│ └─540-{udisksd}
├─547-unattended-upgr
│ ├─548-{unattended-upgr}
│ └─549-{unattended-upgr}
├─535-upowerd
│ ├─536-{upowerd}
│ └─537-{upowerd}
├─586-user-manager
│ ├─587-{user-manager}
│ ├─588-{user-manager}
│ └─589-{user-manager}
└─550-whoopsie
├─551-{whoopsie}
└─552-{whoopsie}
Điều này nhóm các process theo process group ID của chúng, hữu ích cho việc hiểu mối quan hệ giữa các process.
Bạn cũng có thể sử dụng tùy chọn -H để highlight process hiện tại trong đầu ra:
$ pstree -H $$
systemd─┬─ModemManager─┬─dhclient
│ └─2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─apache2─┬─apache2
│ └─2*[apache2]
├─atd
├─cron
├─dbus-daemon
├─dockerd─┬─containerd─┬─containerd-shim─┬─bash
│ │ │ └─3*[{containerd-shim}]
│ │ └─6*[{containerd}]
│ └─7*[{dockerd}]
├─gdm3─┬─Xorg
│ └─gnome-session-b─┬─gnome-shell
│ ├─ibus-daemon─┬─ibus-engine-sim
│ │ └─2*[{ibus-daemon}]
│ └─2*[{gnome-session-b}]
├─irqbalance
├─kerneloops
├─kube-proxy
├─kubelet
├─lightdm─┬─Xorg
│ └─lightdm───sh───fluxbox
├─lxcfs
├─lxd─┬─lxd
│ └─2*[{lxd}]
├─polkitd───2*[{polkitd}]
├─rsyslogd
├─snapd───10*[{snapd}]
├─ssh-agent
├─systemd-journal
├─systemd-logind
├─systemd-networkd
├─systemd-resolve
├─systemd-timesyn
├─systemd-udevd
├─udisksd───3*[{udisksd}]
├─unattended-upgr───2*[{unattended-upgr}]
├─upowerd───2*[{upowerd}]
├─user-manager───3*[{user-manager}]
└─whoopsie───2*[{whoopsie}]
Lệnh này highlight process hiện tại (trong trường hợp này là shell process) trong đầu ra.
Lệnh pstree cung cấp rất nhiều tùy chọn để lọc và tùy chỉnh đầu ra cho phù hợp với nhu cầu cụ thể của bạn. Bằng cách khám phá các tùy chọn này, bạn có thể hiểu sâu hơn về process hierarchy trên hệ thống Linux và giám sát, quản lý các process của hệ thống hiệu quả hơn.
Kết luận cho linux pstree command
Tóm lại, lệnh pstree là một công cụ tuyệt vời để hình dung cây tiến trình trên hệ thống Linux của bạn. Nó giúp bạn dễ dàng hiểu được mối quan hệ cha-con giữa các tiến trình đang chạy. Với các tùy chọn khác nhau, bạn có thể tùy chỉnh đầu ra để hiển thị thông tin chi tiết hơn hoặc đơn giản hơn. Hy vọng rằng hướng dẫn này đã giúp bạn hiểu rõ hơn về cách sử dụng linux pstree command. Hãy thử nghiệm với các tùy chọn khác nhau để khám phá hết tiềm năng của nó. Chắc chắn rằng bạn sẽ thấy nó hữu ích trong việc quản lý và gỡ lỗi hệ thống Linux của mình. Đừng ngần ngại tìm hiểu thêm các lệnh Linux khác để nâng cao kỹ năng của bạn. Chúc bạn thành công trên hành trình khám phá Linux!