ps命令 & proc文件系统
ps
查询所有的进程:
ps -ef | head -1 && ps -ef | grep "进程名" # 显示所有的进程,显示的项目有:UID,PID,PPID,C,STIME,TTY,TIME,CMD
或
ps auxf | head -1 && ps auxf grep "进程名" # 显示所有的进程,显示的项目有:USER,PID,%CPU,%MEM,VSZ,RSS,TTY,STAT,START,TIME,COMMAND
# 参数:
# f 用ASCII字符显示树状结构,以显示进程间的相互关系(父子关系)。
举例:ps auxf grep "进程名" -A 10 # 查看指定进程和该进程的子进程。
# a 显示所有用户的所有进程(包括其它用户)
# 结果:
# USER 启动进程的用户
# PID 进程ID
# %CPU 进程占用CPU的百分比
# %MEM 进程占用内存的百分比
# VSZ 进程使用的虚拟内存量(KB)
# RSS 进程占用的内存量(KB)
# TTY 启动该进程的终端 (注:tty是终端设备的统称,一般:?表示不关系终端,pts/0表示通过网络连接的终端,)
# STAT: 该进程的状态:
R 正在运行或在运行队列中等待
S 处于休眠状态
s 包含子进程
l 该进程是一个多线程进程
< 高优先级进程
N 低优先级进程
+ 位于后台的进程组
D 不可中断的休眠
T 停止
Z 僵死
W 无驻留页
L 内存锁页
# START 进程的启动时间
# TIME 进程使用的总cpu时间
# COMMAND 正在执行的命令行的命令
查看指定进程下的线程:
ps -T PID # 进程下的线程数:(ps -T PID | wc -l) - 1
参数:-T Show threads, possibly with SPID column
查看占用内存最多的进程:
ps aux | awk '{print "used mem "$4 " -pid "$2}' | sort -r | head -5
/proc
概念:Linux内核提供了一种通过proc文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。
使用:ps aux | grep xxx 找到进程的PID,然后 ls -al /proc/PID 查看进程的相关信息。
说明:
/proc/PID/cmdline 进程的完整命令行信息
/proc/PID/cwd 进程当前工作目录的符号链接 eg:/home/jxn/test
/proc/PID/environ 进程的环境变量
/proc/PID/exe 运行程序的符号链接 eg:exe -> /home/jxn/soft/java8/bin/java
/proc/PID/status 进程的状态信息,包括:名称(Name)、父进程id(ppid)、状态(State)、线程数(Threads)、内存的使用情况(VmSize、VmRSS) 等。
VmSize 分配给该进程的内存大小。
VmRSS 该进程当前使用的物理内存大小,即该进程的常驻集合内存大小(RSS:Resident Set Size)
VmPeak 进程运行过程中占用内存的峰值
说明:若进程使用之前已分配但并非正在使用的内存,则VmRSS会变大,而VmSize会保持不变。
/proc/PID/task 进程下的任务(线程)。统计进程的线程数:ls /proc/PID/task | wc -l
/proc/PID/task/线程id/status 线程的状态信息,包括:名称(Name)、线程id(Pid)、进程id(Tgid)、状态(State)
举例:
# 查看指定进程的内存使用情况。
pid=`ps aux | grep appName | grep -v grep | awk '{print $2}'`
memSize=`cat /proc/${pid}/status | grep "VmRSS" | awk '{print $2}'`
pstree
格式:pstree 参数 PID
参数:
-p 显示进程id
-a 显示命令行参数
举例:
pstree
# 查看所有的进程,以树状的形式展现。
pstree -a -p PID
# 查看指定进程的进程树(包含PID进程和其子孙进程)。