Linux/Unix:pstree 命令示例:查看进程树
我是 Linux 新用户。如何使用 bash shell 提示符以易于阅读的树形格式显示 Linux 服务器或台式机/笔记本电脑上的进程?
Linux 和 Unix 是多任务操作系统,即可以在同一时间段内运行多个任务(进程)的系统。在 Linux 或类 Unix 系统上,进程不过是一个正在运行的程序(命令)。
pstree 命令详细信息 | |
---|---|
描述 | 以树状图的形式查看正在运行的进程 |
类别 | 流程管理 |
难度等级 | 简单的 |
Root 权限 | 不 |
操作系统兼容性 | BSD • Linux • macOS • Unix • WSL |
预计阅读时间 | 5 分钟 |
目的
在 Linux 上以树的形式显示正在运行的进程
句法
基本语法如下:
pstree
或者
pstree pid
或者
pstree user
或者
pstree [options] pid|user
注意:如果pid作为命令行参数给出,则从此 PID 启动;默认值为 1(init)。如果user作为命令行参数给出,则仅显示以此用户的进程为根的树。pstree 只接受一个参数,该参数可以是用户或pid。
在 Unix 上安装 pstree
默认情况下,pstree 命令仅在 Linux 操作系统上安装和可用。对于类 Unix 系统(如 FreeBSD、OS X 和其他系统),您需要使用源代码或第三方二进制存储库进行安装。您可以在大多数 Unix 下编译 pstree,经过测试的包括 AIX、Linux、HP-UX、A/UX、SunOS、Solaris、(Free|Open|Net)BSD、MacOSX/Darwin 和其他系统。使用wget 命令获取源代码:
$ wget ftp://ftp.thp.uni-duisburg.de/pub/source/pstree.tar.gz
使用 tar 命令提取文件并使用 c 编译器 (cc) 构建源代码:
示例输出:
$ tar zxvf pstree.tar.gz
$ cc -O -o pstree pstree.c
## install binary in /usr/local/bin/ directory ##
$ sudo cp pstree /usr/local/bin
在 MacOS X 上安装 pstree
键入以下命令:
$ brew install pstree
pstree 命令示例
要查看服务器上当前所有进程的树状图,请输入:
示例输出:
# pstree
# pstree | less
# pstree | more
# pstree -A
显示命令行参数
要查看命令行参数列表,请传递-a选项:
$ pstree -a
示例输出:
图02:显示正在运行的进程以及命令行参数
显示 PID
要显示每个进程名称的 PID,请传递-p选项:
$ pstree -p
示例输出:
systemd(1)-+-accounts-daemon(2873)-+-{gdbus}(3022) | `-{gmain}(2984) |-acpid(2845) |-apt.systemd.dai(22456)---unattended-upgr(23394)---http(23407) |-atd(2881) |-atop(27818) |-cgmanager(2876) |-cron(2841) |-dbus-daemon(2892) |-dnsmasq(3289) |-dnsmasq(5693)---dnsmasq(5694) |-haveged(744) |-irqbalance(3179) |-iscsid(3057) |-iscsid(3065) |-libvirtd(20176)-+-{libvirtd}(20177) | |-{libvirtd}(20178) | |-{libvirtd}(20179) | |-{libvirtd}(20180) | |-{libvirtd}(20181) | |-{libvirtd}(20182) | |-{libvirtd}(20183) | |-{libvirtd}(20184) | |-{libvirtd}(20185) | |-{libvirtd}(20186) | |-{libvirtd}(20187) | |-{libvirtd}(20188) | |-{libvirtd}(20189) | |-{libvirtd}(20190) | `-{libvirtd}(20191) |-login(3180)---bash(6855) |-lvmetad(633) |-lxcfs(2837)-+-{lxcfs}(2973) ..... ... .... |-sshd(3028)---sshd(23065)---sshd(23161)---bash(23162)---pstree(25110) |-sudo(11906)---corefreqd-mgr(11907)-+-{corefreqd-kill}(11908) | |-{corefreqd/0}(11909) | |-{corefreqd/1}(11910) | |-{corefreqd/2}(11911) | |-{corefreqd/3}(11912) | |-{corefreqd/4}(11913) | |-{corefreqd/5}(11914) | |-{corefreqd/6}(11915) | `-{corefreqd/7}(11916) |-systemd(6845)---(sd-pam)(6850) |-systemd-journal(745) |-systemd-logind(2950) |-systemd-timesyn(2689)---{sd-resolve}(2726) |-systemd-udevd(667) |-tclsh(3144)---{tclsh}(6199) |-virtlockd(20121)---{virtlockd}(20124) |-virtlogd(5910)---{virtlogd}(19998) `-zed(2848)
如何对流程进行排序?
要按 PID 而不是按名称(即数字排序)对具有相同祖先的进程进行排序,请传递-n以下选项:
$ pstree -n
$ pstree -np
我如何知道谁是某个流程的所有者/用户?
要找出括号中进程的所有者,请将-u选项传递给 pstree 命令:
$ pstree -u
示例输出:
systemd-+-accounts-daemon-+-{gdbus} | `-{gmain} |-acpid |-apt.systemd.dai---unattended-upgr---http(_apt) |-atd(daemon) |-atop |-cgmanager |-cron |-dbus-daemon(messagebus) |-dnsmasq(lxd) |-dnsmasq(libvirt-dnsmasq)---dnsmasq(root) |-haveged |-irqbalance |-2*[iscsid] |-libvirtd---15*[{libvirtd}] |-login---bash(vivek) |-lvmetad |-lxcfs---3*[{lxcfs}] |-lxd---22*[{lxd}] |-lxd---systemd(100000)-+-accounts-daemon-+-{gdbus} | | `-{gmain} | |-agetty | |-atd(100001) | |-cron | |-dbus-daemon(100107) | |-dhclient | |-lighttpd(100033) | |-memcached(100113)---5*[{memcached}]
我如何才能突出显示当前流程及其祖先?
传递-h选项以突出显示当前进程及其祖先。传递-H选项突出显示指定进程(按名称/pid):
$ pstree -h
或突出显示 PID 为 # 60093 的进程:
$ pstree -H 60093
示例输出:
如何通过 PID 或用户查看进程?
pstree 可以接受 PID 或用户名作为命令行参数。语法如下,用于查看有关 PID 1313 的信息。
在以下示例中,仅显示由用户名为以下用户启动的树分支(进程):
$ pstree 1313
$ pstree -H 1313
$ pstree example
pstree 命令选项
从命令手册页:
选项 | 意义 |
---|---|
-a | 显示命令行参数。 |
-A | 使用 ASCII 线绘图字符。 |
-c | 不要压缩相同的子树。 |
-h | 突出显示当前进程及其祖先。 |
-H | 突出显示此过程及其祖先。 |
-G | 使用 VT100 线描字符。 |
-l | 不要截断长行。 |
-n | 按 PID 对输出进行排序。 |
-p | 显示 PID;隐含 -c。 |
-u | 显示 uid 转换。 |
-U | 使用 UTF-8(Unicode)线绘图字符。 |
-V | 显示版本信息。 |
-Z | 显示 SELinux 安全上下文。 |
相关媒体
本教程还提供简短视频格式:
结论
您了解显示进程树的 pstree 命令。使用以下 man 命令阅读手册页:
man pstree
您也可以下载pstree 源代码。