Skip to content

进程管理命令

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

1. ps 查看当前系统进程状态

ps:process status 进程状态
基本语法
ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以额外查看子父进程之间的关系)
选项说明

选项功能
a列出带有终端的所有用户的进程
x列出当前用户的所有进程,包括没有终端的进程
u面向用户友好的显示风格
-e列出所有进程
-u列出某个用户关联的所有进程
-f显示完整格式的进程列表
功能说明
  1. ps aux 显示信息说明:
    USER:该进程是由哪个用户产生的
    PID:进程的 ID 号
    %CPU:该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源;
    %MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源;
    VSZ:该进程占用虚拟内存的大小,单位 KB;
    RSS:该进程占用实际物理内存的大小,单位 KB;
    TTY:该进程是在哪个终端中运行的。对于 CentOS 来说,tty1 是图形化终端,
    tty2-tty6: 是本地的字符界面终端。pts/0-255 代表虚拟终端。
    STAT:进程状态。常见的状态有:R:运行状态、S:睡眠状态、T:暂停状态、
    Z:僵尸状态、s:包含子进程、l:多线程、+:前台显示
    START:该进程的启动时间
    TIME:该进程占用 CPU 的运算时间,注意不是系统时间
    COMMAND:产生此进程的命令名
  2. ps -ef 显示信息说明:
    UID:用户ID
    PID:进程ID
    PPID:父进程ID
    C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
    STIME:进程启动的时间
    TTY:完整的终端名称
    TIME:CPU时间
    CMD:启动进程所用的命令和参数

提示

  • 如果想查看进程的CPU占用率和内存占用率,可以使用aux参数;
  • 如果想查看进程的父进程ID可以使用ef;
sh
[root@hadoop100 ~]# ps -ef | grep sshd
root      17152      1  0 1月11 ?       00:00:00 /usr/sbin/sshd -D
root      86755  17152  0 20:06 ?        00:00:00 sshd: root@pts/0
root      89397  86759  0 21:00 pts/0    00:00:00 grep --color=auto sshd

下图可以看到所有的进程最开始都是从pid为0和1的进程启动起来的, 其中pid为1的进程systemd主要用来启动用户进程,pid为2的进程kthreadd用来启动系统进程。
Alt text 如下图所示,我们在查进程的时候,会冒出一个grep --color=auto(pid 90590)的进程,它是由~bash进程产生的,而~bash进程是通过sshd的root会话进程(pid 86755)产生的,而root会话进程是由后台服务sshd(pid 17152)产生的, 可以发现ssh会话是会产生~bash进程的。
Alt text

2. kill 终止进程

基本语法:
kill [选项] 进程号 (通过进程号杀死进程)选项-9表示强迫进程立即停止)
kill all 进程名称 (通过进程名称杀死进程,也支持通配符,比较少用)

sh
## 杀死浏览器进程
[root@hadoop100 ~]# kill -9 5102
## 通过进程名称杀死进程
 [root@hadoop100 ~]# kill firefox

下图是kill所有信号展示图: 其中-9表示发送kill信号,所以强制终止进程就是发送kill信号
Alt text

3. pstree 查看进程树

基本语法 pstree [选项]

选项说明
-p显示进程的 PID
-u显示进程的所属用户
sh
[root@hadoop100 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─login───bash
        ├─master─┬─pickup
        └─qmgr
        ├─polkitd───6*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───4*[{tuned}]

可见sshd的确会启动一个bash进程

4. top 实时监控系统进程状态

基本命令 top [选项]
选项说明

选项功能
-d 秒数指定 top 命令每隔几秒更新。默认是 3 秒在 top 命令的交互模式当中可以执行的命令:
-i使 top 不显示任何闲置或者僵死进程。
-p通过指定监控进程 ID 来仅仅监控某个进程的状态。

操作说明

操作功能
P以 CPU 使用率排序,默认就是此项
M以内存的使用率排序
N以 PID 排序
q退出 top

返回结果信息字段解释:
第一行信息为任务队列信息

内容说明
12:26:46系统当前时间
up 1 day, 13:32系统的运行时间,本机已经运行 1 天13 小时 32 分钟
2 users当前登录了两个用户
load average: 0.00, 0.00, 0.00系统在之前 1 分钟,5 分钟,15 分钟的平均负载。一般认为小于 1 时,负载较小。如果大于1,系统已经超出负荷。

第二行为进程信息

Tasks: 95 total系统中的进程总数
1 running正在运行的进程数
94 sleeping睡眠的进程
0 stopped正在停止的进程
0 zombie僵尸进程。如果不是 0,需要手工检查僵尸进程

第三行为 CPU 信息

Cpu(s): 0.1%us用户模式占用的 CPU 百分比
0.1%sy系统模式占用的 CPU 百分比
0.0%ni改变过优先级的用户进程占用的 CPU 百分比
99.7%id空闲 CPU 的 CPU 百分比
0.1%wa等待输入/输出的进程的占用 CPU 百分比
0.0%hi硬中断请求服务占用的 CPU 百分比
0.1%si软中断请求服务占用的 CPU 百分比
0.0%stst(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比。

第四行为物理内存信息

Mem: 625344k total物理内存的总量,单位 KB
571504k used已经使用的物理内存数量
53840k free空闲的物理内存数量
65800k buffers作为缓冲的内存数量

第五行为交换分区(swap)信息

Swap: 524280k total交换分区(虚拟内存)的总大小
0k used已经使用的交互分区的大小
524280k free空闲交换分区的大小
409280k cached作为缓存的交互分区的大小
## 查看当前运行的进程
[root@hadoop100 ~]# top -i

Alt text 可以发现其中有两个进程处于sleep状态, 需要说明的是top展示的是从指定间隔时间开始到结束中间占用系统CPU的进程,有可能在这段间隔时间占用CPU然后又睡眠当前处于sleep状态

5. netstat 显示网络状态和端口占用信息

基本语法
netstat -anp | grep 进程号 (功能描述:查看该进程网络信息)
netstat –nlp | grep 端口号 (功能描述:查看网络端口号占用情况)
选项说明

选项功能
-a显示所有正在监听(listen)和未监听的套接字(socket)
-n拒绝显示别名,能显示数字的全部转化成数字
-l仅列出在监听的服务状态
-p表示显示哪个进程在调用
## 查看某端口号是否被占用
[root@hadoop100 ~]# netstat -nltp | grep 22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      17152/sshd          
tcp6       0      0 :::22                   :::*                    LISTEN      17152/sshd

Alt text