
在学习查看进程之前应该再次认识一下进程的标识符——PID
每个进程都有一个非负的唯一进程ID(PID)。虽然是唯一的,但是PID可以重用,当一个进程终止后,其他进程就可以使用它的PID了。
PID为0的进程为调度进程,该进程是内核的一部分,也称为系统进程;PID为1的进程为init进程,它是一个普通的用户进程,但是以超级用户特权运行;PID为2的进程是页守护进程,负责支持虚拟存储系统的分页操作。
除了PID,每个进程还有一些其他的标识符,在unistd.h库中提供了这些函数来获取进程的标识符,可以了解一下:
#include <unistd.h>
pid_t getpid(void); //返回值:调用进程的进程ID
pid_t getppid(void); //返回值:调用进程的父进程ID
#include<sys/types.h>
uid_t getuid(void); //返回值:调用进程的实际用户ID
uid_t geteuid(void); //返回值:调用进程的有效用户ID
gid_t getgid(void); //返回值:调用进程的实际组ID
gid_t getegid(void); //返回值:调用进程的有效组ID
下面是几种查看进程的方式:
- 通过 /proc 系统文件夹查看
Linux系统上根目录下的proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。

如要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹
2. 通过ps命令查看
ps 命令是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和它所运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。总之大部分信息都是可以通过执行该命令得到的。ps 命令最常用来监控后台进程的工作情况,因为后台进程是不和屏幕、键盘这些标准输入/输出设备进行通信的,所以如果需要检测后台情况,就需要使用 ps 命令了
ps所能用到的主要选项如下:
-a:显示系统中所有进程的信息。
-e:显示所有进程的信息。
-f:显示进程的所有信息。
-l:以长格式显示进程信息。
-r:只显示正在运行的进程。
-u:显示面向用户的格式(包括用户名、CPU 及内存的使用情况等信息)。
-x:显示所有非控制终端上的进程信息。
-p:显示由进程 ID 指定的进程信息。
-t:显示指定终端上的进程信息。
要对进程进行监测和控制,首先要了解当前进程的情况,当然也就需要查看当前进程的状态了。通过 ps 命令查看进程,根据所显示的信息可以了解哪个进程正在运行、哪个进程被挂起了、进程已运行了多久、进程正在使用的资源、进程的相对优先级,以及进程的标志号(PID)。所有这些信息对用户都很有用,对于系统管理员来说尤为重要。使用 ps -aux 命令可以获得终端上所有用户的有关进程的所有信息,这个也是我们平时用得最多的命令之一,如下所示:

在这里,第一行的表头分别代表了以下含义:
USER:表示启动进程的用户。
PID:表示进程标志号。
%CPU:表示运行该进程占用 CPU 的时间与该进程总的运行时间之比。
%MEM:表示该进程占用内存与总内存之比。
VSZ:表示占用的虚拟内存大小,以 KB 为单位。
RSS:为进程占用的物理内存值,以 KB 为单位。
TTY:表示该进程建立时所对应的终端,“?”表示该进程不占用终端。
STAT:表示进程的运行状态。包括以下几种代码:D,不可中断的睡眠;R,就绪(在可运行队列中);S,睡眠;T,被跟踪或停止;Z,终止(僵死)的进程,这些进程不存在,但暂时无法消除;W,没有足够的内存分页可分配;<,高优先级的进程;N,低优先级的进程;L,有内存分页分配并锁在内存体内(实时系统或 I/O)。
START:为进程开始时间。
TIME:为执行的时间。
COMMAND:是对应的命令名。
由于 ps 执行后结果太多了,所以我们一般会用ps命令和管道与grep命令一起来精确定位我们需要的进程,例如,当我们要查看mysql的进程时,可以使用命令ps -aux | grep mysql
,结果如下:
ubuntu@VM-0-7-ubuntu:/$ ps -aux | grep mysql mysql 3677 0.0 10.2 1123492 197104 ? Ssl Jul21 91:40 /usr/sbin/mysqld ubuntu 18788 0.0 0.0 13232 1028 pts/0 S+ 10:28 0:00 grep --color=auto mysql
我们会发现多出了一条grep命令自身的进程,所以我们一般会加上grep的-v选项过滤掉grep命令自身:
ubuntu@VM-0-7-ubuntu:/$ ps -aux | grep -v grep | grep mysql mysql 3677 0.0 10.2 1123492 197104 ? Ssl Jul21 91:41 /usr/sbin/mysqld
3. 通过top命令查看
top 命令可动态显示服务器的进程信息。top 命令和 ps 命令的基本作用是相同的,都显示系统当前进程的状况。但 top 是一个动态显示过程,即用户可以通过按键来不断刷新当前状态

第一行内容依次表示当前时间、系统启动的时间、当前系统登录的用户数、平均负载
第二行依次显示的是所有启动的、目前运行的、挂起(Sleeping)的和无用(Zombie)的进程
第三行显示的是目前 CPU 的使用情况,包括系统占用的比例、用户使用比例、闲置(Idle)比例
第四行显示物理内存的使用情况,包括总的可以使用的内存、已用内存、空闲内存、缓冲区占用的内存
第五行显示交换分区的使用情况,包括总的交换分区、使用的、空闲的和用于高速缓存的交换分区
第六行是表头,下面分别进行详细解释:
PID(Process ID):进程标志号,是非零正整数。
USER:进程所有者的用户名。
PR:进程的优先级别。
NI:进程的优先级别数值。
VIRT:进程占用的虚拟内存值。
RES:进程占用的物理内存值。
SHR:进程使用的共享内存值。
STAT:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
%CPU:该进程占用的CPU使用率。
%MEM:该进程占用的物理内存和总内存的百分比。
TIME:该进程启动后占用的总CPU时间。
COMMAND:进程启动的启动命令名称,如果这一行显示不下,在进程中会有一个完整的命令行。
在 top 命令使用过程中,还可以使用一些交互的命令来完成其他参数的功能。这些命令是通过快捷键启动的,格式如下所示:
<空格>:立刻刷新其主要参数。
P:根据CPU使用的多少进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存的大小进行排序。
W:将当前设置写入~/.toprc文件中,这是写top配置文件的推荐方法。
4. 通过pgrep命令查找PID
pgrep 命令的作用是查找当前运行的进程,并列出匹配给定条件进程的 PID。所有的条件都必须匹配才会被列出。使用权限为所有用户
ubuntu@VM-0-7-ubuntu:~$ pgrep mysql 3677