进程管理
进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有自己的地址空间,占用一定的系统资源
# 介绍
在linux中,每个执行的程序,代码都称为一个进程,每个进程都分配一个ID号
每个进程,都会对应一个父进程,父进程可以复制多个子进程,如 www 服务器
每个进程都可能以2种方式存在
- 前台进程:用户目前的屏幕上可以进行操作的
- 后台进程:实际操作的进程;在屏幕上无法看到的进程,通常使用后台方式执行
一般系统的服务都是以后台进程的方式存在,都会常驻在系统中,直到关机才结束
# ps 显示系统执行的进程
process status
基本语法
- ps -a 显示当前终端的所有进程信息
- ps -u 以用户的格式显示进程信息
- ps -x 显示后台进程运行的参数
# ps aux 查看所有进程
ps -aux | grep xxx
[root@hadoop100 home]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19344 1552 ? Ss Mar10 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S Mar10 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Mar10 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S Mar10 0:00 [ksoftirqd/0]
....
1
2
3
4
5
6
7
2
3
4
5
6
7
说明
- USER 该进程是由哪个用户产生的
- PID 进程的ID号
- %CPU 该进程占用CPU资源百分比
- %MEM 占用物理内存百分比
- VSZ 占用虚拟内存大小,单位KB
- RSS 占用实际物理内存大小,单位KB
- TTY 进程是哪个终端中运行的
- tty1-tty7 代表本地控制台
- tty1-tty6代表本地字符界面终端
- tty7是图形终端
- pts/0-255代表虚拟终端
- STAT 进程状态
- R 正在运行
- S 睡眠
- T 停止状态或者被跟踪
- D 短期等待
- Z 僵死进程
- s 表示该进程是会话的先导进程
- N 表示进程拥有比普通优先级更低的优先级
- START 进程的启动时间
- TIME 进程占用CPU运算时间,不是系统时间,进程使用CPU的总时间
- COMMAND 产生此进程的命令和参数,如果过长会被截断显示
# ps -ef 父子进程的关系
命令格式
- ps -ef | grep xxx
- 以全格式显示当前所有的进程
- -e 显示所有进程
- -f 全格式
[root@hadoop100 home]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Mar10 ? 00:00:01 /sbin/init
root 2 0 0 Mar10 ? 00:00:00 [kthreadd]
root 3 2 0 Mar10 ? 00:00:00 [migration/0]
root 4 2 0 Mar10 ? 00:00:00 [ksoftirqd/0]
....
1
2
3
4
5
6
7
2
3
4
5
6
7
说明:BSD风格显示
- UID 用户ID
- PID 进程ID
- PPID 父进程ID
- C CPU用于计算执行优先级的因子,值越大,说明进程是CPU密集型运算,执行优先级会降低;值越小,说明进程是IO密集型运算,执行优先级会提高
- STIME 进程启动时间
- TTY 完整的终端名称
- TIME CPU时间
- CMD 启动进程所有的命令和参数
应用实例
- 查看sshd 进程的父进程号
- ps -ef | grep sshd
# kill killall 终止进程
若某个进程执行一半,需要停止时,或者已经消耗了很多的系统资源时,此时需要考虑停止该进程
基本语法
- kill [选项] 进程号
- 通过进程号杀死进程
- 选项
- -9 表示强迫进程立刻终止
- killall 进程名称
- 通过进程名称杀死进程,支持通配符
- 在系统因为负载过大而变慢时很有用
示例
- kill -9 5553
- killall firefox
应用案例
- 剔除某个非法登录的用户
- ps -aux | grep sshd
- 通过该命令,查出正在使用ssh的用户信息,找到对应的pid信息
- kill 对应pid值
- ps -aux | grep sshd
- 终止远程登录服务sshd,在适当的时候重启sshd服务
- ps -aux | grep sshd
- 找到执行命令是 /usr/sbin/sshd的pid信息
- kill 该pid的值
- ps -aux | grep sshd
- 终止多个gedit 编辑器
- killall gedit
- 强制杀掉一个终端
- kill -9 pid
# pstree 查看进程树
基本语法
- pstree [选项]
选项
- -p 显示进程的PID
- -u 显示进程所属的用户
[root@hadoop100 home]# pstree -p
init(1)─┬─ManagementAgent(2002)─┬─{ManagementAgen}(2019)
│ └─{ManagementAgen}(2021)
├─NetworkManager(2342)
├─VGAuthService(1878)
├─abrtd(2785)
├─acpid(2457)
├─atd(2812)
├─auditd(2222)───{auditd}(2223)
├─automount(2546)─┬─{automount}(2547)
│ ├─{automount}(2548)
│ ├─{automount}(2551)
....
[root@hadoop100 home]# pstree -u
init─┬─ManagementAgent───2*[{ManagementAgen}]
├─NetworkManager
├─VGAuthService
├─abrtd
├─acpid
├─atd
├─auditd───{auditd}
....
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# top 动态监控进程
基本语法
- top [选项]
选项
- -d 秒数 指定top命令每隔几秒更新,默认3s
- -i 不显示任务号闲置或者僵死的进程
- -p 通过指定监控进程ID的进程
交互操作:在输入top后,可以输入如下命令
- P 以CPU使用率排序,默认
- M 以内存使用率排序
- N 以PID排序
- q 退出top
应用实例
- 监视特定用户
- top
- 输入u 回车,再输入用户名
top - 21:30:15 up 16 days, 1:34, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 237 total, 1 running, 236 sleeping, 0 stopped, 0 zombie
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
Mem: 2038376k total, 906052k used, 1132324k free, 153668k buffers
Swap: 2097148k total, 0k used, 2097148k free, 469900k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19344 1552 1232 S 0.0 0.1 0:01.61 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
...
说明:
第一行:任务队列信息
21:30:15 系统当前时间
up 16 days, 1:34 系统的运行时间,已经运行1天13小时32分钟
3 users 当前登陆了3个用户
load average:0.00,0.01,0.05 系统在之前1分钟,5分钟,15分钟的平均负载,一般认为小于1,负载较小,如果大于1,系统超出负荷
第二行:进程信息
Tasks:237total 系统中的进程总数
1 running 正在运行的进程数
236 sleeping 睡眠的进程
0 stopped 正在停止的进程
0 zombie 僵尸进程,如果不是0,需要手动检查僵尸进程
第三行:cpu信息
0.0%us 用户模式占用的CPU百分比
0.1%sy 系统模式占用的cpu百分比
0.0%ni 改变过优先级的用户进程占用的cpu百分比
99.9%id 空闲cpu的百分比
0.0%hi 硬中断请求服务占用的cpu百分比
0.0%si 软终端请求服务占用的cpu百分比
0.0%st st steal time 虚拟时间百分比,当有虚拟机的时候,虚拟cpu等待实际cpu的时间百分比
第四行:物理内存
2038376k total 物理内存总量,KB
906052k used 已使用物理内存的数量
1132324k free 空闲的物理内存数量
153668k buffers 作为缓冲的内存数据量
第五层:交换分区信息
2097148k total 虚拟内存总大小
0k used 已使用的交互分区大小
2097148k free 空闲的交换分区大小
469900k cached 作为缓冲的交互分区大小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
- 终止指定的进程
- top
- 输入k后回车,再输入要结束的进程ID号
- 指定系统状态更新时间(默认是3秒,设置为10秒)
- top -d 10
# 关于安装htop
1.下载
[root@hadoop100 home]# wget http://sourceforge.net/projects/htop/files/htop/1.0.2/htop-1.0.2.tar.gz
2.解压安装
tar -xvf htop-1.0.2.tar.gz
切换到对应的目录下
cd htop-1.0.2
./configure && make && make install
3.报错:configure: error: missing libraries: libncurses
yum install ncurses-devel
4.重新安装
[root@hadoop100 htop-1.0.2]# ./configure && make && make install
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Last Updated: 2022/03/20, 10:04:55