Linux 进程查看工具详解

1,255 阅读5分钟

这是我参与新手入门的第一篇文章~~

查看进程的命令

pidof pgrep pstree ps top等等。

  • pidof命令用于查找指定名称的进程的进程号。
root@localhost ~# pidof sshd
122323 121730 1719

这个命令无法模糊搜索,所以在使用的时候一定要知道准确的进程名字

  • 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 -- 静态查看进程的统计信息

ps命令用来列出系统中当前运行的那些进程。 ps命令参数众多,这里只讲两种搭配用法: 1.ps aux

# a:显示终端下所有进程信息,包括其他用户的进程
# u:显示进程的拥有者
# x:显示当前用户所在终端下的进程信息,和a一起用,显示所有进程

# 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

# -l:长格式显示

# 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

top - 06:10:09 up 1 day, 12:24,  1 user,  load average: 0.00, 0.01, 0.05
# 系统时间 运行时长 当前1个用户登录系统 系统在1分钟、5分钟、15分钟的平均负载情况
Tasks: 120 total,   1 running, 119 sleeping,   0 stopped,   0 zombie
# 192个进程 1个正在运行 119个休眠 0个停止的 0个僵尸进程
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3861372 total,  3276688 free,   215736 used,   368948 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  3403116 avail Mem 
...

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'参数。

后台运行程序,查看和关闭后台运行程序

1、运行.sh文件

直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令。

(1)&命令

​ 功能:加在一个命令的最后,可以把这个命令放在后台执行

(2)nohup命令 -- 后端运行程序

​ 功能:将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端

2、查看当前后台运行的命令

有两个命令可以用,jobs和ps,区别是jobs用于查看当前终端后台运行的任务,换了终端就看不到了。而ps命令用于查看瞬间进程的动态,可以看到别的终端运行的后台进程。

(1)jobs命令

​ 功能:查看当前终端后台运行的任务,显示系统中的任务列表及其运行状态

​ jobs -l选项可显示当前终端所有任务的PID,jobs的状态可以是running,stopped,Terminated。+ 号表示当前任务,- 号表示后一个任务。

-l	显示作业列表时包括进程号
-n	显示上次使用jobs后状态发生变化的作业
-p	显示作业列表时仅显示其对应的进程号
-r	仅显示运行的(running)作业
-s	仅显示暂停的(stopped)作业

3、关闭当前后台运行的命令

kill命令:结束进程

(1)通过jobs命令查看jobnum,然后执行 kill %jobnum

(2)通过ps命令查看进程号PID,然后执行 kill %PID

​ 如果是前台进程的话,直接执行 Ctrl+c 就可以终止了

# 终止指定进程名的进程(同名进程均被终止)
killall -9 bash

# pkill 按照特定的条件结束进程
pkill -9 bash # 同killall -9 bash
# 根据进程所属的用户名终止相应进程
pkill -U zhangsan
# 根据进程所在的终端终止相应进程
pkill -t pts/1

4、前后台进程的切换与控制

(1)fg命令

​ 功能:将后台中的命令调至前台继续运行

​ 如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。

(2)Ctrl + z 命令

​ 功能:将一个正在前台执行的命令放到后台,并且处于暂停状态

(3)bg命令

​ 功能:将一个在后台暂停的命令,变成在后台继续执行

​ 如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg %jobnum 将选中的命令调出继续执行。