linux命令之-pstree使用说明

本文介绍了pstree命令的各种参数及其使用方法,包括显示运行中的进程树、突出显示指定进程的父进程等。通过实例展示了如何查找特定进程的父进程及如何显示所有进程的详细信息。
    pstree  shows running processes as a tree. The tree is rooted at either pid or init if pid is omitted. If a user name is specified, all process trees rooted at  processes  owned  by that user are shown.
 参数:
-a  显示出该命令的参数, 假如这个命令进程被其他进程替换掉, 那么进程将显示在括号中 -a 选项包含有压实进程树的选项, 对于相同的进程, 会使用n*(process)的形式展显出来。
-c     关闭禁用显示结果进程树,在默认情况下,进程子树是会被压缩的。不管有多少进程名相同的进程,都会逐个显示出来。
-G    使用vt100线性描述树
-h     突空出显示当前进程的父进程并高亮显示出来,如果没有父进程那么什么都不会显示。
-H     突出显示出指定进程的父进程信息并高亮显示出来,使用方法为 pstree  -H  PID
-l      显示长格式命令选项,在默认的情况下,命令行最多显示宽度为132bit  ,超过将不能正常显示。
-n  基于进程相同的祖先来进行排序,可以命名pid来代替进程名称 。
-p    显示所有的时程,显示结果包含进程名和时进程ID
-u    显示出用户的UID,无论何时,这个UID和进程比较UID参数,这个新的UID将在进程名后显示不同的参数。
-U  使用utf-8字符集以十进制表示,
-v     显示版本号
 
使用实例:
1、需要查找dbeng7 这个僵尸进程的父进程。
    pstree  -H  僵尸进程的PID号
    pstree  -H  4049  
|-kapmd
     |-9*[kdeinit]
     |-2*[kdeinit---kdeinit]
     |-2*[kdeinit---cat]
     |-kdeinit-+-rxvt---bash
     |         `-\326\320\312\257\273\257\274\323\323\315\325\276\271\334\277---startgk.sh---Prjyzgl---dben+
     |-keventd
     |-khubd
     |-3*[kjournald]
     |-klogd
     |-2*[knotify]
     |-ksoftirqd_CPU0
     |-kswapd

2、显示当前所有进程的进程号和进程ID
 pstree  -p   
3、显示所有进程的所有详细信息, 遇到相同的进程名可以压缩显示。
   pstree  -a

原文地址:http://blog.163.com/likaifeng@126/blog/static/320973102012311115745507/
<think>我们被要求详细解释Linux系统中`pstree -p`命令的作用和使用方法。根据引用[2]和引用[4]的内容,我们可以得到以下信息: 1. **命令作用**:`pstree -p`命令用于以树状结构显示进程及其父子关系,并在每个进程名称旁边显示其进程ID(PID)。这样用户可以直观地看到进程的层级关系以及每个进程的具体PID。 2. **功能说明**: - 显示进程树:以树状结构展示系统中正在运行的进程,展示进程之间的父子关系(即哪些进程是由其他进程派生出来的)。 - 显示进程ID:使用`-p`选项后,会在每个进程名称后面用括号显示该进程的PID,例如:`sshd(1234)─┬─sshd(5678)───bash(9012)`。 3. **使用场景**: - 当需要查看某个进程及其子进程的PID时(如引用[4]中提到的排查线程资源耗尽问题)。 - 分析进程间的关系,例如查找某个服务的所有相关进程。 - 结合其他命令(如`grep`)进行更复杂的进程分析。 4. **常用参数**(结合引用[2]): - `-p`:显示进程的PID。 - 其他常用选项(虽然不是`-p`直接相关的,但可以配合使用): - `-a`:显示命令行参数。 - `-n`:按PID排序而不是按进程名(默认按进程名排序)。 - `-l`:避免截断长行(显示完整命令行)。 - `-c`:不压缩相同的子树(默认会压缩相同的进程分支)。 5. **使用示例**(根据引用[2]和引用[4]): - 显示所有进程的树状结构并包含PID:`pstree -p` - 显示特定进程ID的进程树:`pstree -p 1234`(其中1234是目标进程的PID) - 显示特定用户的进程树:`pstree -p username` - 统计系统中进程和线程的总数(通过组合命令):`pstree -p | wc -l`(注意:这统计的是行数,因为每个进程或线程在树中占一行,但要注意树状结构中的缩进符号也会被计入行数,所以这个数字并不是精确的进程数,但可以作为一个参考) 6. **注意事项**: - 如果进程树很长,可以使用`less`等分页工具:`pstree -p | less` - 在排查资源耗尽问题时(如引用[4]中提到的线程数用完),可以通过`pstree -p`查看进程树,结合进程ID进一步分析(如使用`ps`查看线程数)。 7. **安装说明**: - 如果系统没有安装pstree,需要安装`psmisc`包(引用[2]提供了安装方法): - Debian/Ubuntu: `sudo apt install psmisc` - CentOS/RHEL: `sudo yum install psmisc` - Fedora: `sudo dnf install psmisc` 8. **输出解读**: - 树状结构:通过缩进和符号(如`├─`、`└─`)表示层级关系。 - 进程名称和PID:例如`sshd(1234)`,其中`sshd`是进程名,`1234`是PID。 9. **与其他命令结合**: - 结合`grep`查找特定进程:`pstree -p | grep sshd` - 结合`pgrep`获取进程ID后再用pstree显示:`pstree -p $(pgrep sshd)` 根据以上信息,我们可以组织回答。</think>### Linux系统中 `pstree -p` 命令详解 `pstree -p` 是 Linux 系统中用于**可视化进程树结构并显示进程 ID(PID)** 的关键命令。它基于 `pstree` 工具(属于 `psmisc` 软件包),通过树状图直观展示进程间的父子关系,并明确标注每个进程的 PID[^2][^3]。以下是详细解释: --- #### **一、核心功能** 1. **树状结构展示** - 以缩进和分支形式显示进程层级关系,例如: ```bash systemd(1)─┬─sshd(1234)───sshd(5678)───bash(9012) ├─nginx(2345)─┬─nginx(3456) │ └─nginx(4567) └─dockerd(6789)───containerd(7890) ``` - 根进程通常是 `systemd(1)` 或 `init(1)`,其他进程是其子进程或后代[^1][^2]。 2. **显示进程 ID(PID)** - `-p` 参数在每个进程名后附加括号标注 PID,例如 `nginx(2345)`[^2][^3]。 3. **父子关系可视化** - 通过符号(`├─`, `└─`, `───`)表示进程间的派生关系,清晰展示: - 哪些进程由同一父进程创建 - 进程的嵌套层级深度 --- #### **二、使用场景与示例** | **场景** | **命令示例** | **作用** | |-----------------------------|----------------------------------|-------------------------------------------| | 查看系统所有进程树 | `pstree -p` | 显示完整进程树及所有 PID[^2] | | 查看特定进程的子进程 | `pstree -p 2345` | 显示 PID=2345 的进程及其后代 | | 查看用户的进程树 | `pstree -p username` | 仅显示指定用户拥有的进程[^2] | | 排查资源耗尽问题 | `pstree -p \| wc -l` | 统计进程/线程总数(如线程数超限问题)[^4] | | 结合其他命令分析 | `ps aux \| grep nginx && pstree -p $(pgrep nginx)` | 定位进程并查看其树状结构[^3] | --- #### **三、关键参数解析** | **参数** | **作用** | |----------|--------------------------------------------------------------------------| | `-p` | 显示所有进程的 PID(核心功能) | | `-n` | 按 PID 数值排序(默认按进程名排序)[^3] | | `-c` | 禁用相同子树的压缩(默认会折叠重复进程) | | `-l` | 禁止截断长命令行(完整显示参数)[^2] | | `-h` | 高亮显示指定进程及其后代(如 `pstree -h 2345`) | --- #### **四、工作原理** 1. **数据来源** - 读取 `/proc` 文件系统中的进程信息,包括: - `/proc/[pid]/status`:进程状态和 PPID(父进程 ID) - `/proc/[pid]/task/`:线程信息(线程视为轻量级进程) 2. **树构建逻辑** - 从 PID=1 的根进程开始递归遍历 - 通过 PPID 字段建立父子关系链 - 使用 ASCII 字符绘制树状分支结构 --- #### **五、典型应用案例** **问题诊断**:服务器报错 `-bash: fork: retry: 没有子进程` **解决步骤**: 1. 执行 `pstree -p \| wc -l` 统计进程总数 2. 若接近系统线程限制(`ulimit -u`),使用 `pstree -p` 定位线程密集型进程[^4] 3. 发现异常进程(如泄露线程的 Java 服务): ```bash java(12345)─┬─{java}(12346) ├─{java}(12347) └─...(共 500+ 线程) ``` 4. 重启问题进程或调整 `/etc/security/limits.d/20-nproc.conf`[^4] --- #### **六、安装说明** 若系统未预装,需安装 `psmisc` 包: ```bash # Debian/Ubuntu sudo apt install psmisc # CentOS/RHEL sudo yum install psmisc # Fedora sudo dnf install psmisc ``` --- > **注意**:`pstree -p` **不显示线程名**(仅显示 PID)。若需查看线程详情,可结合 `ps -T -p <PID>` 命令[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值