1、进程管理
进程可以理解为正在运行中的程序,都有自己的地址空间,并占用一定的系统资源,任何程序包括系统命令都至少包含一个进程。
例如,ls命令也有进程,不过它执行的很快,执行完了,进程就关闭了,我们很难观察到它。
进程管理的主要工作包括
- 查看服务器的健康状况
- 查看系统中的任意进程
- 杀死指定进程
1.1 top
top [选项]
-d 指定状态更新的周期,默认是3s
top命令的交互模式可以执行的命令
?或h 显示帮助
P 以CPU使用率排序,默认就是此项,注意大小写
M 以内存的使用率排序
N 以PID来排序
q 退出
top命令执行后,在顶部会有5行统计信息,其中比较重要的有:
- 第一行,load average,系统在之前1分钟,5分钟,15分钟 的平均负载。对于单核CPU来说,认为小于1时,负 载较小。如果大于1,系统已经超出负荷。
- 第二行,是进程的统计
- 第三行,CPU信息,主要关注99.7%id,空闲CPU的CPU百分比
- 第四行,内存信息,主要关注53840k free,空闲的物理内存数量
- 第五行,交换分区信息
1.2 ps
ps aux //查看系统中所有进程,包含其他使用者的进程,使用BSD操作系统格式,注意这种格式的选项没有“-”。a显示所有前台进程,x显示所有后台进程,u显示用户信息
ps -le //查看系统中所有进程,使用Linux标准命令格式。l长格式,显示详细信息,e显示所有进程。
显示参数的含义:
- 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:产生此进程的命令名
案例:
- 根据 CPU 使用来升序排序
$ ps -aux –sort -pcpu | less - 根据 内存使用 来升序排序
$ ps -aux –sort -pmem | head 20
1.3 pstree
pstree [选项]
选项:
-p: 显示进程的PID
-u: 显示进程的所属用户
注意:
- init(1),是所有进程的父进程
- 有的中的8*,表示有8个子进程
1.4 kill
kill –l //查看可用的进程信号
进程信号很多,常用的有
- 1 sighup 该信号让进程立即关闭,然后重新读取配置文件之后重启
- 9 sigkill 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。 一般用于强制终止进程。
- 15 sigterm 正常结束进程的信号,kill命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试信号9。
案例:
- kill -1 22354 //重启进程,好多进程的restart其实也是调用它
- kill -9 22368 //强制杀死进程
1.5 killall
killall [选项][信号] 进程名 //按照进程名杀死进程
选项:
-i: 交互式,询问是否要杀死某个进程
-I: 忽略进程名的大小写
1.6 pkill
pkill [选项] [信号] 进程名 //按照进程名终止进程
选项:
-t 终端号: 按照终端号踢出用户
例如:
w //使用w命令查询本机已经登录的用户
pkill -9 -t pts/1 //强制杀死从pts/1虚拟终端登录的进程
killall和pkill与kill的区别在于,它能按照进程名杀死一类进程,pkill和killall的区别,在于可以提出终端用户
2、工作管理
2.1 把进程放入后台
两种方式:&和ctrl + z
tar -zcf etc.tar.gz /etc &
top //在top命令执行的过程中,按下ctrl+z快捷键
这两种方式的区别在于,&放入后台的程序,还在运行,但是ctrl + z放入后台的程序会暂停运行
注意: vim, top等命令不能放入到后台运行,因为他们运行的目的就是和用户交互的,放到后台并且运行,对于他们来说没有意义。但是打包、压缩、查找这些命令是可以放入后台执行的。
2.2 jobs
查看后台的工作
jobs [-l] 选项:
-l: 显示工作的PID
注意: “+”号代表最近一个放入后台的工作,也是工作恢 复时,默认恢复的工作。“-”号代表倒数第二个放入后台的工作。
2.3 fg
将后台暂停的工作恢复到前台执行
fg %工作号
参数:
%工作号: %号可以省略,但是注意工作号和PID的区别
2.4 bg
把后台暂停的工作恢复到后台执行
bg %工作号
注意:后台恢复执行的命令,是不能和前台有 交互的,否则不能恢复到后台执行,例如vim
3、系统状态查看
3.1 vmstat
vmstat [刷新周期 刷新次数]
这是top命令的简化版,主要用来查看剩余内存和CPU的占用情况
3.2 dmesg
dmesg | grep -i cpu 忽略大小写
dmesg用来显示内核环缓冲区(kernel-ring buffer)内容,内核将各种消息存放在这里。在系统引导时,内核将与硬件和模块初始化相关的信息填到这个缓冲区中。内核环缓冲区中的消息对于诊断系统问题 通常非常有用。例如,如果发现硬盘性能低下,可以使用dmesg来检查它们是否运行在DMA模式。
开机信息亦保存在/var/log/dmesg的文件中。
3.2 free
free [-b|-k|-m|-g] //查看内存使用状态,选项是显示的单位,默认为kb
缓冲区和缓存的区别和联系
- 联系,都是内存中的一个区域,只是作用不同,理论基础是,内存的速度要远高于硬盘
- 区别,缓存cache是用来加速读取硬盘的,缓冲区buffer是用来加速写入硬盘的
3.3 cat /proc/cpuinfo
查看cpu信息
3.4 uptime命令
top命令的第一行,时间、开机时长、用户数、平均负载等
uptime/top/w都可以看到这些信息
3.5 uname/file ls命令文件/ lsb_release
查看系统及内核的相关信息
uname -a //查看系统所有相关信息
file /bin/ls //判断当前系统的位数
lsb_release -a //查看系统的发行版本
3.6 lsof
lsof [选项] //列出进程调用或打开的文件的信息
选项:
- -c 字符串: 只列出以字符串开头的进程打开的文件
- -u 用户名: 只列出某个用户的进程打开的文件
- -p pid: 列出某个PID进程打开的文件
lsof abc.txt 显示开启文件abc.txt的进程
lsof -c abc 显示abc进程现在打开的文件
lsof -p 1234 列出进程号为1234的进程所打开的文件
4、定时任务
4.1 启动定时服务
Linux默认安装和提供的定时任务管理工具,一般不需要启动和重启
service crond restart
chkconfig –list | grep crond 查看服务
crond对应的配置文件在/etc/crontab
4.2 crontab
crontab [选项]
选项:
-e: 编辑crontab定时任务
-l: 查询crontab任务
-r: 删除当前用户所有的crontab 任务
任务的格式:
* * * * * 执行的任务
- 第一个“*”
一小时当中的第几分钟
0-59 - 第二个“*”
一天当中的第几小 时
0-23 - 第三个“*”
一个月当中的第几 天
1-31 - 第四个“*”
一年当中的第几月
1-12 - 第五个“*”
一周当中的星期几
0-7(0和7都代表星期日)
注意:10 * * * * 表示每个小时的第10个分钟,而不是每隔十分钟,如果要用每隔十分钟需要配合特殊符号 */10
特殊符号:
- * 代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。
- , 代表不连续的时间。比如“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分都会 执行命令。注意:星期几和几号同时出现代表or的条件,而不是and条件,但是最好不要同时出现,因为他们定义的都是天,非常容易让管理员混乱。
注意:
date +%y%m%d 表示格式化日期显示,但是这个命令放在crondtab中会报错,%需要转义,date +\%y\%m\%d