一、进程管理
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
进程管理的作用:
- 判断服务器健康状态
- 查看系统中所有进程
- 杀死进程
1.1 进程查看
1.1.1 ps
查看系统中所有进程的命令是:
ps aux #查看系统中所有进程,使用BSD操作系统格式
或
ps -le #查看系统中所有进程,使用Linux标准命令格式
ps aux
命令输出如下:
下面我们分析一下ps aux
命令的输出。
- USER:该进程是由哪个用户产生的
- PID:进程的ID号
- %CPU:该进程占用CPU资源的百分比, 占用越高, 进程越耗费资源
- %MEM:该进程占用物理内存的百分比, 占用越高, 进程越耗费资源
- VSZ:该进程占用虚拟内存的大小, 单位 KB
- RSS:该进程占用实际物理内存的大小, 单位KB
- TTY:该进程是在哪个终端中运行的。tty1-tty7 代表本地控制台终端,其中 tty1-tty6 是本地的字符界面终端, tty7 是图形终端。 pts/0-255 代表虚拟终端。如果是「?」则说明该进程是由内核直接产生的。
- STAT:进程状态。常见的状态有:R:运行;S:睡眠;T:停止状态;s:包含子进程;+:位于后台
- START:该进程的启动时间
- TIME:该进程占用 CPU 的运算时间, 注意不是系统时间
- COMMAND:产生此进程的命令名
1.1.2 top 查看系统健康状态
top 命令格式如下:top [选项]
选项:
- -d 秒数:指定 top 命令每隔几秒更新。默认是3秒
在 top 命令的交互模式当中可以执行的命令:
?
或h
:显示交互模式的帮助P
:以 CPU 使用率排序,默认就是此项M
:以内存的使用率排序N
:以 PID 排序q
:退出 top
top 命令执行结果如下:
其中比较重要的是前 5 行信息。
第一行信息为任务队列信息
内容 | 说明 |
---|---|
19:23:45 | 系统当前时间 |
up 27 min | 系统的运行时间,本机已经运行 27 分钟 |
2 users | 当前登录了 2 个用户 |
load average: 0.00, 0.00, 0.00 | 系统在之前 1 分钟,5 分钟, 15 分钟的平均负载。一般认为小于 1 时, 负载较小。如果大于 1,系统已经超出负荷。 |
第二行为进程信息
内容 | 说明 |
---|---|
Tasks: 90 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
94 sleeping | 睡眠的进程 |
0 stopped | 正在停止的进程 |
0 zombie | 僵尸进程,如果不是 0,需要手工检查进程 |
第三行为 CPU 信息
内容 | 说明 |
---|---|
0.0%us | 用户模式占用的 CPU 百分比 |
0.0%sy | 系统模式占用的 CPU 百分比 |
0.0%ni | 改变过优先级的用户进程占用的 CPU 百分比 |
99.7%id | 空闲 CPU 的 CPU 百分比 |
0.0%wa | 等待输入/输出的进程的占用 CPU 百分 比 |
0.0%hi | 硬中断请求服务占用的 CPU 百分比 |
0.3%si | 软中断请求服务占用的 CPU 百分比 |
0.0%st | st( Steal time) 虚拟时间百分比。就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
第四行为物理内存信息
内容 | 说明 |
---|---|
1020232k total | 物理内存的总量,单位 KB |
267828k used | 已经使用的物理内存数量 |
752404k free | 空闲的物理内存数量 |
20848k buffers | 作为缓冲的内存数量 |
**第五行为交换分区(swap)信息 **
内容 | 说明 |
---|---|
1023992k total | 交换分区(虚拟内存) 的总大小 |
0k used | 已经使用的交互分区的大小 |
1023992k free | 空闲交换分区的大小 |
125208k cached | 作为缓存的交互分区的大小 |
1.1.3 查看进程树:pstree
pstree 命令可以查看进程树,该命令的格式如下:pstree [选项]
选项:
-p
:显示进程的 PID-u
:显示进程的所属用户
pstree 命令执行结果如下:
1.2 终止进程
1.2.1 kill
kill 命令的格式如下:
kill [进程信号] PID
kill -l
可以查看可用的进程信号,如下图所示:
下面这几个是常用的进程信号:
例如:
kill -1 22354 #重启进程
kill -9 22368 #强制杀死进程
1.2.2 killall
killall 命令的作用是按照进程名杀死进程,命令格式如下:
killall [选项][进程信号] 进程名
选项:
-i
:交互式, 询问是否要杀死某个进程-I
:忽略进程名的大小写
这里的进程信号和 kill 命令的进程信号是通用的。
例如:
1.2.3 pkill 命令
pkill 命令和 killall 命令的功能类似,都可以按照进程名杀死进程,命令格式也类似:
pkill [选项][进程信号] 进程名
同时 pkill 还有一个功能是按照终端号踢出用户,命令格式如下:
pkill -9 -t 终端号
例如:
二、工作管理
2.1 把进程放入后台
第一种方式是在命令后面加一个&
,用这种方式进程在后台会继续执行。例如:
#在根目录下查找名字中含sh的文件或目录,并把结果放入find_result.txt文件中
find / -name "*sh*" >> find_result.txt &
第二种方式是在命令执行过程中按ctrl+z
快捷键,这种方式进程会暂停运行,在后台挂起。比如,输入 top 命令,然后按下ctrl+z
快捷键:
2.2 查看后台的工作
查看后台的工作用如下命令:
jobs [-l]
选项-l
的作用是显示工作的 PID。
注: 「+」代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。「-」代表倒数第二个放入后台的工作。由此我们可以看出,用ctrl+z
命令放入后台的工作是「栈」用来存储的,遵循先入后出的原则。
2.3 将后台暂停的工作恢复到前台执行
命令如下:
fg %工作号 #工作号指的是用jobs命令查看后台工作时每一行前面显示的序号,而不是进程号PID
参数:
- %工作号:「%」可以省略, 但是注意工作号和 PID 的区别
2.4 把后台暂停的工作恢复到后台执行
命令如下:
bg %工作号
注:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行。
三、系统资源查看
3.1 vmstat 监控系统资源
命令格式如下:vmstat [刷新延时 刷新次数]
例如:
vmstat 1 3
命令执行结果如下:
3.2 dmesg 查看开机时内核检测信息
命令格式如下:dmesg
例如,查看 CPU 信息:
dmesg | grep CPU
执行结果如下:
3.3 free 查看内存使用状态
命令格式如下:free [-b|-k|-m|-g]
选项:
-b
:以字节为单位显示-k
:以 KB 为单位显示,默认就是以 KB 为单位显示-m
:以 MB 为单位显示-g
:以 GB 为单位显示
执行结果如下:
缓冲和缓存的区别
简单来说缓存(cache)是用来加速数据从硬盘中「读取」的,而缓冲(buffer)是用来加速数据「写入」硬盘的。
3.4 查看 CPU 信息
/proc/cpuinfo
文件存储着 CPU 信息,这个文件是存储在内存中的,一旦断电,这个文件中的内容就会消失,再次启动系统时才会恢复。用 cat 可以查看该文件的命令。
3.5 uptime 命令
uptime 命令显示系统的启动时间和平均负载,也就是 top 命令的第一行。 w 命令也可以看到这个数据。
3.6 uname 查看系统与内核相关信息
命令格式如下:uname [选项]
选项:
-a
:查看系统所有相关信息-r
:查看内核版本-s
:查看内核名称
3.7 判断当前系统的位数
Linux 中没有直接查看系统位数的命令,但是我们可以使用 file 命令查看系统外部命令的信息,这个信息里面就包含了系统的位数。比如:
file /bin/ls
3.8 查询当前 Linux 系统的发行版本
使用lsb_release -a
命令可以查询当前Linux系统的发行版本。
命令执行结果如下:
3.9 lsof 列出进程打开或使用的文件信息
命令格式如下:lsof [选项]
选项:
-c 字符串
:只列出以字符串开头的进程打开的文件-u 用户名
:只列出某个用户的进程打开的文件-p pid
:列出某个 PID 进程打开的文件
例如,查看 init 进程打开了哪些文件:
lsof -c init
命令执行结果如下:
四、系统定时任务
4.1 crond 服务管理与访问控制
crond 是管理系统定时任务的服务,默认是自启动的,可以通过chkconfig
命令来查看:
如果没有自启动,可以用chkconfig crond on
命令将 crond 服务设置成自启动。
4.2 用户的 crontab 设置
启动 crond 服务后,用 crontab 命令就可以设置系统定时任务。crontab 命令格式如下:crontab [选项]
。
选项:
-e
:编辑 crontab 定时任务-l
:查询 crontab 定时任务-r
:删除当前用户所有的 crontab 任务
当你输入crontab -e
命令后,就会进入 crontab 编辑界面,用 vim 编辑你的系统定时任务。系统定时任务的格式如下:
* * * * * 执行的任务
项目 | 含义 | 范围 |
---|---|---|
第一个「*」 | 一小时当中的第几分钟 | 0 - 59 |
第二个「*」 | 一天当中的第几小时 | 0 - 23 |
第三个「*」 | 一个月当中的第几天 | 1 - 31 |
第四个「*」 | 一年当中的第几月 | 1 - 12 |
第五个「*」 | 一周当中的星期几 | 0 - 7( 0 和 7 都代表星期日) |
特殊符号 | 含义 |
---|---|
* | 代表任何时间。 比如第一个「*」就代表一小时中每分钟都执行一次的意思 |
, | 代表不连续的时间。 比如0 8,12,16 * * * 命令 ,就代表在每天的 8 点 0 分, 12 点 0 分,16 点 0 分都执 行一次命令 |
- | 代表连续的时间范围。 比如0 5 * * 1-6命令 ,代表在周一到周六的凌晨5点0分执行命令 |
*/n | 代表每隔多久执行一次。 比如*/10 * * * * 命 令 ,代表每隔 10 分钟就执行一遍命令 |
时间 | 含义 |
---|---|
45 22 * * * 命令 | 在 22 点 45 分执行命令 |
0 17 * * 1 命令 | 每周 1 的 17 点 0 分执行命令 |
0 5 1,15 * * 命令 | 每月 1 号和 15 号的凌晨 5 点 0 分执行命令 |
40 4 * * 1-5 命令 | 每周一到周五的凌晨 4 点 40 分执行命令 |
*/10 4 * * * 命令 | 每天的凌晨 4 点,每隔 10 分钟执行一 次命令 |
0 0 1,15 * 1 命令 | 每月 1 号和 15 号, 每周 1 的 0 点 0 分都会执行命令。 注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱 |
举例:
*/5 * * * * /bin/echo "11" >> /tmp/test #每 5 分钟向 /tmp/test 文件中写入一个 11
5 5 * * 2 /sbin/shutdown -r now #每周二的凌晨5点5分重启系统
0 5 1,10,15 * * /root/sh/autobak.sh #每个月的1号、10号、15号的凌晨5点整执行备份脚本