进程管理命令
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
1. ps 查看当前系统进程状态
ps:process status 进程状态
基本语法
ps aux | grep xxx (功能描述:查看系统中所有进程)
ps -ef | grep xxx (功能描述:可以额外查看子父进程之间的关系)
选项说明
选项 | 功能 |
---|---|
a | 列出带有终端的所有用户的进程 |
x | 列出当前用户的所有进程,包括没有终端的进程 |
u | 面向用户友好的显示风格 |
-e | 列出所有进程 |
-u | 列出某个用户关联的所有进程 |
-f | 显示完整格式的进程列表 |
功能说明 |
- 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
:产生此进程的命令名 - ps -ef 显示信息说明:
UID
:用户ID
PID
:进程ID
PPID
:父进程ID
C
:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME
:进程启动的时间
TTY
:完整的终端名称
TIME
:CPU时间
CMD
:启动进程所用的命令和参数
提示
- 如果想查看进程的CPU占用率和内存占用率,可以使用aux参数;
- 如果想查看进程的父进程ID可以使用ef;
[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用来启动系统进程。 如下图所示,我们在查进程的时候,会冒出一个
grep --color=auto
(pid 90590)的进程,它是由~bash进程产生的,而~bash进程是通过sshd的root会话进程(pid 86755)产生的,而root会话进程是由后台服务sshd(pid 17152)产生的, 可以发现ssh会话是会产生~bash进程的。
2. kill 终止进程
基本语法:kill [选项] 进程号
(通过进程号杀死进程)选项-9
表示强迫进程立即停止)kill all 进程名称
(通过进程名称杀死进程,也支持通配符,比较少用)
## 杀死浏览器进程
[root@hadoop100 ~]# kill -9 5102
## 通过进程名称杀死进程
[root@hadoop100 ~]# kill firefox
下图是kill所有信号展示图: 其中-9
表示发送kill信号,所以强制终止进程就是发送kill信号
3. pstree 查看进程树
基本语法 pstree [选项]
选项 | 说明 |
---|---|
-p | 显示进程的 PID |
-u | 显示进程的所属用户 |
[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%st | st(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
可以发现其中有两个进程处于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