我使用过的Linux命令之pstree - 以树状图显示进程间的关系

我使用过的Linux命令之pstree - 以树状图显示进程间的关系

本文链接:http://codingstandards.iteye.com/blog/842156   (转载请注明出处)

用途说明

pstree命令以树状图显示进程间的关系(display a tree of processes)。ps命令可以显示当前正在运行的那些进程的信息,但是对于它们之间的关系却显示得不够清晰。在Linux系统中,系统调用fork可以创建子进程,通过子shell也可以创建子进程,Linux系统中进程之间的关系天生就是一棵树,树的根就是进程PID为1的init进程。

 

常用参数

格式:pstree

以树状图显示进程,只显示进程的名字,且相同进程合并显示。

 

格式:pstree -p

以树状图显示进程,还显示进程PID。

 

格式:pstree <pid>

格式:pstree -p <pid>

以树状图显示进程PID为<pid>的进程以及子孙进程,如果有-p参数则同时显示每个进程的PID。

 

格式:pstree -a

以树状图显示进程,相同名称的进程不合并显示,并且会显示命令行参数,如果有-p参数则同时显示每个进程的PID。

 

因为pstree输出的信息可能比较多,所以最好与more/less配合使用。

 

使用示例

示例一

[root@web ~]# pstree
init-+-acpid
     |-atd
     |-auditd-+-audispd---{audispd}
     |        `-{auditd}
     |-automount---4*[{automount}]
     |-avahi-daemon---avahi-daemon
     |-crond---5*[crond-+-mj.sh]
     |                  `-sendmail]
     |-cupsd
     |-dbus-daemon---{dbus-daemon}
     |-events/0
     |-events/1
     |-gam_server
     |-gpm
     |-hald---hald-runner-+-hald-addon-acpi
     |                    |-hald-addon-keyb
     |                    `-hald-addon-stor
     |-hcid
     |-hidd
     |-hpiod
     |-java-+-java---17*[{java}]
     |      `-14*[{java}]
     |-java-+-java---29*[{java}]
     |      `-14*[{java}]
     |-java-+-java---34*[{java}]
     |      `-14*[{java}]
     |-java---20*[{java}]
     |-java---292*[{java}]
     |-khelper
     |-klogd
     |-krfcommd
     |-ksoftirqd/0
     |-ksoftirqd/1
     |-kthread-+-aio/0
     |         |-aio/1
     |         |-ata/0
     |         |-ata/1
     |         |-ata_aux
     |         |-cqueue/0
     |         |-cqueue/1
     |         |-hd-audio0
     |         |-kacpid
     |         |-kauditd
     |         |-kblockd/0
     |         |-kblockd/1
     |         |-khubd
     |         |-khungtaskd
     |         |-2*[kjournald]
     |         |-kmpath_handlerd
     |         |-kmpathd/0
     |         |-kmpathd/1
     |         |-kondemand/0
     |         |-kondemand/1
     |         |-kpsmoused
     |         |-kseriod
     |         |-ksnapd
     |         |-kstriped
     |         |-kswapd0
     |         |-2*[pdflush]
     |         |-rpciod/0
     |         |-rpciod/1
     |         |-scsi_eh_0
     |         |-scsi_eh_1
     |         |-scsi_eh_2
     |         |-scsi_eh_3
     |         |-scsi_eh_4
     |         `-scsi_eh_5
     |-loop0
     |-mcstransd
     |-migration/0
     |-migration/1
     |-6*[mingetty]
     |-mj.sh---make---java---11*[{java}]
     |-ntpd
     |-pcscd---{pcscd}
     |-portmap
     |-python
     |-restorecond
     |-rpc.idmapd
     |-rpc.statd
     |-screen---bash---update.sh---cvs
     |-sendmail---2*[sendmail]
     |-sendmail
     |-setroubleshootd---2*[{setroubleshootd}]
     |-smartd
     |-sshd-+-sshd---bash---update_and_rest---cvs
     |      |-sshd---bash---pstree
     |      `-sshd---bash
     |-start_derby.sh---java---45*[{java}]
     |-surf---8*[{surf}]
     |-syslogd
     |-tomcat---sleep
     |-udevd
     |-watchdog/0
     |-watchdog/1
     |-xfs
     |-xinetd
     `-yum-updatesd
[root@web ~]#

 

示例二

[root@web ~]# pstree -p | less
init(1)-+-acpid(2569)
        |-atd(2983)
        |-auditd(2225)-+-audispd(2227)---{audispd}(2232)
        |              `-{auditd}(2226)
        |-automount(2654)-+-{automount}(2655)
        |                 |-{automount}(2656)
        |                 |-{automount}(2659)
        |                 `-{automount}(2662)
        |-avahi-daemon(3026)---avahi-daemon(3027)
        |-crond(2916)-+-crond(14707)-+-mj.sh(14709)
        |             |              `-sendmail(14773)
        |             |-crond(14708)-+-mj.sh(14710)
        |             |              `-sendmail(14754)
        |             `-crond(26312)-+-mj.sh(26314)
        |                            `-sendmail(26387)
        |-cupsd(2717)
        |-dbus-daemon(2446)---{dbus-daemon}(2447)
        |-events/0(8)
        |-events/1(9)
        |-gam_server(3175)
        |-gpm(2902)
        |-hald(2587)---hald-runner(2588)-+-hald-addon-acpi(2596)
        |                                |-hald-addon-keyb(13708)
        |                                `-hald-addon-stor(2606)
        |-hcid(2477)
        |-hidd(2628)
        |-hpiod(2676)
        |-java(1572)-+-java(1586)-+-{java}(1590)
        |            |            |-{java}(1591)
        |            |            |-{java}(1592)
        |            |            |-{java}(1593)
        |            |            |-{java}(1594)
        |            |            |-{java}(1595)
        |            |            |-{java}(1596)
        |            |            |-{java}(1597)
        |            |            |-{java}(1598)
        |            |            |-{java}(1599)
        |            |            |-{java}(1600)
        |            |            |-{java}(1782)
        |            |            |-{java}(1783)
:

 

示例三

[root@web ~]# pstree -a | less
init                                             
  |-acpid
  |-atd
  |-auditd
  |   |-audispd
  |   |   `-{audispd}
  |   `-{auditd}
  |-automount
  |   |-{automount}
  |   |-{automount}
  |   |-{automount}
  |   `-{automount}
  |-avahi-daemon
  |   `-avahi-daemon
  |-crond
  |   |-crond
  |   |   |-(mj.sh)
  |   |   `-sendmail
  |   |-crond
  |   |   |-(mj.sh)
  |   |   `-sendmail
  |   |-crond
  |   |   |-(mj.sh)
  |   |   `-sendmail -FCronDaemon -i -odi -oem -oi -t
  |   |-crond
  |   |   |-(mj.sh)
  |   |   `-sendmail -FCronDaemon -i -odi -oem -oi -t
  |   `-crond
  |       |-(mj.sh)
  |       `-sendmail -FCronDaemon -i -odi -oem -oi -t
  |-cupsd
  |-dbus-daemon --system
  |   `-{dbus-daemon}
  |-(events/0)
  |-(events/1)
  |-gam_server
  |-gpm -m /dev/input/mice -t exps2
  |-hald
  |   `-hald-runner
  |       |-hald-addon-acpi
:

 

示例四

[root@web ~]# pstree 2701
sshd-+-sshd---bash---update_and_rest---cvs
     |-sshd---bash---pstree
     `-sshd---bash
[root@web ~]# pstree -p 2701
sshd(2701)-+-sshd(6745)---bash(6749)---update_and_rest(14193)---cvs(14194)
           |-sshd(12626)---bash(12630)---pstree(15588)
           `-sshd(13324)---bash(13328)
[root@web ~]#

 

问题思考

相关资料

【1】Linux Operating System     How to use pstree an alternative to ps    
【2】THE GEEK STUFF     tree and pstree: Visualize Unix Processes and Directories in Hierarchical Structure    
【3】Linux basic configurations     Introduction to Linux process and daemons     
【4】LINFO     The pstree Command

 

返回 我使用过的Linux命令系列总目录

 

# 实验6 进程管理实验报告 ## 一、实验目的和要求 - 练习Linux进程管理命令 - 了解如何监视系统运行状态 - 掌握查看、删除进程的正确方法 - 掌握命令在后台运行的用法 - 掌握进程手工、调度启动的方法 ## 二、实验环境 - 硬件:PC机 - 软件:Ubuntu操作系统、虚拟机 ## 三、实验步骤及结果 ### 1. 查看系统状态 - **命令**:`top` - **操作**:进入系统,执行`top`命令察看当前系统的状态。 - **截图**:[此处插入top命令执行结果的截图] - **解释说明**:top命令显示了系统的整体运行状态,包括CPU使用率、内存使用率、进程列表等。通过该命令可以识别各进程的有关说明信息。 ### 2. 查看系统当前进程 - **命令**:`ps aux > process` 和 `cat process` - **操作**: - 执行`ps aux > process`命令,将系统当前的进程保存到文件`process`中。 - 执行`cat process`命令查看`process`文件内容。 - **截图**:[此处插入process文件内容的截图] - **解释说明**:`ps aux`命令列出了所有进程的详细信息,包括进程ID、用户、CPU使用率、内存使用率等。 ### 3. 查看当前进程- **命令**:`pstree` - **操作**:执行`pstree`命令查看当前进程树。 - **截图**:[此处插入pstree命令执行结果的截图] - **解释说明**:`pstree`命令以树状结构显示进程之间的父子关系。 ### 4. 查看init进程 - **问题**:查看系统当前有没有init进程?什么是init进程- **操作**: - 通过`ps aux`或`pstree`命令查找init进程- **截图**:[此处插入查找init进程结果的截图] - **解释说明**:init进程Linux系统启动后的第一个进程,负责启动其他系统服务和进程。在较新的系统中,init可能被systemd等替代。 ### 5. 找出bash进程的父进程 - **命令**:`ps -ef | grep bash` 和 `pstree`(辅助查看) - **操作**: - 执行`ps -ef | grep bash`命令查找bash进程及其父进程- 可选:使用`pstree`命令辅助查看bash进程进程树中的位置。 - **截图**:[此处插入查找bash进程及其父进程结果的截图] - **解释说明**:通过命令可以找到bash进程的PID及其父进程的PID。 ### 6. 杀死bash进程 - **命令**:`kill PID`(其中PID为bash进程的ID) - **操作**: - 执行`kill PID`命令杀死bash进程- **截图**:[此处插入杀死bash进程前后的对比截图,如终端状态变化] - **解释说明**:杀死bash进程后,当前终端会话将终止,因为bash是终端的shell进程。 ### 7. 输入“cat <回车>”并按Ctrl+z、Ctrl+c - **操作**: - 输入`cat`命令后按回车。 - 按`Ctrl+z`键挂起cat进程- 输入`fg`命令尝试将cat进程恢复到前台。 - 按`Ctrl+c`键终止cat进程- **截图**:[此处插入相关操作的截图] - **解释说明**: - `Ctrl+z`将进程挂起到后台。 - `fg`命令将后台进程恢复到前台。 - `Ctrl+c`终止前台进程。 ### 8. 查找并杀死find进程 - **命令**:`find / -name ls* > temp &` 和 `killall find` - **操作**: - 执行`find / -name ls* > temp &`命令在后台查找名为ls*的文件,并将结果重定向到temp文件。 - 执行`killall find`命令杀死所有find进程- **截图**:[此处插入相关操作的截图,包括find进程查找和杀死前后的对比] - **解释说明**:通过后台运行find命令可以避免阻塞终端,使用`killall`可以方便地杀死所有同名进程。 ### 9. 运行睡眠和vi进程 - **操作**: - 在前台运行2个睡眠进程(sleep),并挂起。 - 在前台运行1个vi进程,并挂起。 - 在后台运行1个睡眠进程- **截图**:[此处插入相关操作的截图] - **解释说明**:展示了如何在前台和后台运行进程,并挂起进程。 ### 10. 列出和调度作业 - **命令**:`jobs`、`bg`、`fg`、`kill` - **操作**: - 执行`jobs`命令列出所有正在运行的作业。 - 使用`bg`命令将第二默认作业在后台继续运行。 - 使用`fg`命令将1号作业在前台继续运行。 - 使用`kill`命令杀死默认作业。 - **截图**:[此处插入相关操作的截图] - **解释说明**:展示了如何列出作业、将作业在后台或前台继续运行,以及杀死作业。 ## 四、实验总结和思考 ### 1. 在Linux中启动一个进程,可采取哪些方式? - 可以直接在终端输入命令启动进程- 可以通过脚本启动进程- 可以通过系统服务管理工具(如systemd)启动进程。 ### 2. 进程的查看和调度分别可使用什么命令?请至少列举出5种命令并加以说明。 - `ps`:查看当前进程状态。 - `top`:动态查看系统进程状态。 - `pstree`:以树状结构显示进程关系- `jobs`:列出当前shell会话中的作业。 - `bg`/`fg`:将作业在后台或前台继续运行。 ### 3. Linux进程有哪些状态? - 运行(Running):进程正在CPU上执行。 - 就绪(Ready):进程已准备好执行,等待CPU资源。 - 阻塞(Blocked):进程等待某个事件(如I/O操作)完成。 - 停止(Stopped):进程被暂停执行,如通过`Ctrl+z`挂起。 - 僵尸(Zombie):进程已终止,但其进程描述符仍存在,等待父进程回收。
最新发布
05-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值