查看进程的命令有哪些?
pidof pgrep pstree ps top
等等。
pidof
命令用于查找指定名称的进程的进程号。
# pidof chrome
31965 22019 22659 22641 22161 22120
这个命令无法模糊搜索,所以在使用的时候一定要知道准确的进程名字
pgrep
命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。
# pgrep -o chr -l
22019 chrome
这个命令不仅可以模糊搜索,还可以通过-o
参数找到起始进程,-l
打印名字。
pstree
命令将所有行程以树状图显示。
# pstree 22019
chrome─┬─2*[cat]
├─chrome─┬─chrome
│ └─7*[{chrome}]
├─chrome───8*[{chrome}]
├─chrome-sandbox───chrome─┬─chrome─┬─7*[chrome───10*[{chrome}]]
│ │ ├─chrome───9*[{chrome}]
│ │ ├─chrome───12*[{chrome}]
│ │ ├─2*[chrome───11*[{chrome}]]
│ │ └─chrome───13*[{chrome}]
│ └─chrome-sandbox───nacl_helper
└─27*[{chrome}]
接下来我们详细讲一下ps和top命令。
常用命令之ps
ps命令用来列出系统中当前运行的那些进程。
ps命令参数众多,这里只讲两种搭配用法:
1.ps aux
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 165820 10644 ? Ss 08:58 0:01 /lib/systemd/systemd --switched-root --system --deserialize 33
- %CPU
%CPU = cputime/realtime*100
,这个值不可能达到100%。
cputime:进程生命周期中使用cpu的时间。
realtime:进程生命周期。 - %MEM
进程占用物理内存的百分比 - VSZ
进程占用虚拟内存的量,单位KB - RSS
进程占用物理内存的量,单位KB - TTY
该进程是在哪个终端机上面运作,若与终端机无关,则显示'?',另外,tty1-tty6是本机上面的登入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序。
守护进程因为脱离session,所以这一栏显示'?'。 - STAT
该程序目前的状态,主要的状态有:
D 不可中断睡眠(通常是在IO操作)收到信号不唤醒和不可运行,进程必须等待直到有中断发生
R 正在运行或可运行(在运行队列排队中)
S 可中断睡眠(休眠中,受阻,在等待某个条件的形成或接受到信号)
T 已停止的,进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
W 正在换页(2.6.内核之前有效)
X 死进程(未开启)
Z 僵尸进程,进程已终止,但进程描述符存在,直到父进程调用wait()系统调用后释放
< 高优先级(not nice to other users)
N 低优先级(nice to other users)
L 有页被锁定在内存(实时和定制的IO)
s 首进程
l 多线程(使用CLONE_THREAD,像NPTL的pthreads的那样)
+ 在前台进程组
- START
进程的启动时间 - TIME
累计使用cpu的时间,格式:hh:mm:ss - COMMAND
所执行的指令
2.ps alx
# ps alx
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 165820 10644 - Ss ? 0:01 /lib/systemd/systemd --switched-root --system --deserialize 33
- PPID
父进程的pid - PRI
进程的优先级。数字越大意味着优先级越低。
PRI是内核动态调整的,我们使用者也无权去干涉。 - NI
进程的NICE值,数值大,表示较少占用CPU时间。
nice值可调整的范围为-20至19。
PRI(new)=PRI(old)+nice
- WCHAN
正在等待的进程资源。
常用命令之top
top命令用于实时显示进程的动态。
# top
1:Def - 13:54:34 up 4:56, 1 user, load average: 0.47, 0.35, 0.32
Tasks: 219 total, 1 running, 218 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.2 us, 1.6 sy, 0.0 ni, 93.7 id, 0.0 wa, 0.0 hi, 1.6 si, 0.0 st
MiB Mem : 7941.9 total, 2662.9 free, 2790.4 used, 2488.6 buff/cache
MiB Swap: 11264.0 total, 11264.0 free, 0.0 used. 4530.0 avail Mem
1 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4090 root 20 0 301276 141988 108788 S 6.2 1.7 9:02.77 Xorg
...
top命令展示的信息特别多,这边简单讲几个我觉得重要的:
-
load average
一段时间(1分钟、5分钟、15分钟)内CPU平均负载。
在top命令中按'1'可以看几个CPU分别的情况,一般load average的值 / CPU个数 > 1
说明已经超负荷了。 -
Tasks
警惕zombie僵尸进程,虽然不占用资源,但占pid。 -
%Cpu(s)
us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa 等待I/O的CPU时间百分比
这里要注意wa,如果系统卡,wa高,说明I/O可能出现了拥塞。
-
SHR
共享内存大小,单位kb。详细可了解shmget()函数。 -
%CPU
注意这边的%CPU与ps命令中的完全不同。
top是从上次更新以来,进程占总CPU时间的百分比。
一般几秒钟一刷,可以认为是即时的。值最高为CPU核数x100%。
所以我们平时定位问题需要的是这个值。 -
COMMAND
这里如果需要显示全需要加'-c'参数。
总结
以上是我们在用户态查看进程信息的常用命令。