Linux 进程管理
Linux 进程管理
一、进程管理
1 什么是进程
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的运行空间,并占有一定的系统资源。
2 进程管理的作用
- 判断服务器健康状态
- 查看系统中所有进程
- 杀死进程
3 进程的查看ps命令
- ps aux 查看系统中所有进程,使用
BSD
操作系统格式 ps -le 查看系统中所有进程,使用
Linux
标准命令格式- 选项
- a:显示一个终端的所有进程,除了会话引线
- u:显示进程的归属用户及内存使用情况
- x:显示没有控制终端的进程
- -l:长格式显示,显示更加详细的信息
- -e:显示所有进程,和
a
作用一致
pstree [选项] 查看进程树
- 选项
- -p:显示进程的
pid
- -u:显示进程的所属用户
STAT:进程状态。常见的状态有:
- R:运行
- S:睡眠
- T:停止状态
- s:包含子进程
- +:位于后台
4 进程的查看top命令
- top [选项] 查看系统健康状态
选项
- -d:秒数:指定
top
命令每隔几秒更新。默认是3秒 - -b:使用批处理模式输出。一般和
-n
选项合用 - -n:次数:指定
top
命令执行的次数
- -d:秒数:指定
在top命令的交互模式中可以执行的命令:
- ?或h:显示交互模式的帮助
- P:以
CPU
使用率排序,默认就是此项 - M:以
内存
的使用率排序 - N:以
PID
排序 - q:退出
top
使用top查看所有进程
1 | // 将所有进程的情况输出到 top.log文本文档中 |
5 杀死进程
kill命令 杀死单一进程
kill -l
:查看可用的进程信号kill -1 4399
:重启进程kill -9 4399
:强制杀死进程
killall命令
killall [选项][进程]进程名
:按照进程名杀死进程选项:
- -i:交互式,询问是否要杀死某个进程
- -I:忽略进程名的大小写
pkill命令
pkill [选项][进程]进程名
:按照进程名终止进程选项:
- -t:终端号:按照终端号剔除用户 //踢掉用户 pkill -9 -t pts/?
6 进程优先级
Linux 操作系统是一个多用户,多任务的操作系统,Linux 系统中同时运行着非常多的进程。但 CPU 在同一时钟周期内只能运算一个指令。进程优先级决定了每个进程处理的先后顺序。
注意: 系统优先级:只有NI可以改,priority由两个值PRI,NI相加 nice
:使用前必须先停止进程 renice
:可以修正在运行的进程
nice命令
nice [选项] 命令
:可以给新执行的命令直接赋NI
值,但不能修改已经存在的进程的NI
值选项:
- -n NI值:给命令赋予
NI
值
- -n NI值:给命令赋予
例如:
- nice -n -5 service httpd start
renice命令
renice [优先级] PID
:修改已经存在进程的NI
值的命令例如:
- renice -10 2125
修改NI值时有几个注意事项
- NI 的值的范围是
-20~19
- 普通用户调整 NI 的值的范围是
0~19
,而且只能调整自己的进程 - 普通用户只能调高 NI值,不能降低
- root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程
- PRI(最终值) = PRI(原始值)+ NI
- 用户只能修改 NI 值,不能直接修改时 PRI
- 数字越小,优先级越高
二、工作管理
工作管理指的是在单个登录终端中(也就是登录的 shell 界面中)同时管理多个工作的行为
注意事项:
- 当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作
- 放入后台的命令必须可以持续运行一段时间,这样我们才能捕捉和操作这个工作
- 放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行
1 把进程放入后台
tar -zcf etc.tar.gz/etc &
#在命令后加入&
,把命令放在后台执行- 按下
ctrl + z
快捷键,放在后台暂停
2 查看后台的工作
jobs [-l]
选项:
- -l:显示工作的 PID
注意:
+
代表最近一个放入后台的工作,也是工作回复时,默认恢复的工作-
代表倒数第二个放入后台的工作
3 将后台暂停的工作恢复到前台执行
fg %工作号
#恢复前台运行bg %工作号
#恢复后台运行(不能有交互)
4 后台命令脱离终端执行
把命令放入后台,只能在当前登录终端执行。一旦退出或关闭终端,后台程序就会停止
后台命令脱离登录终端执行的方法:
- 把需要后台执行的命令加入 /etc/rc.local文件
- 使用系统定时任务,让系统在指定的时间执行某个后台命令
- 使用 nohup命令(常用) nohup 命令 &
三、系统资源查看
1 vmstat 命令监控系统资源
vmstat [刷新延时 刷新次数]
例如:
- vmstat 1 3
2 dmsg 开机时内核检测信息
dmesg
dmesg | grep CPU
3 free 命令查看内存使用状态
free [-b|-k|-m|-g]
选项:
- -b:以字节为单位显示
- -k:以KB为单位显示,默认就是以KB为单位显示
- -m:以MB为单位显示
- -g:以GB为单位显示
4 查看 cpu 信息
cat /proc/cpuinfo
5 uptime 命令
uptime
- 显示系统的启动时间和平均负载,也就是top命令的第一行。w命令也可以看到这个数据
6 查看系统与内核相关信息
uname [选项]
选项:
- -a:查看系统所有相关信息;
- -r:查看内核版本;
- -s:查看内核名称。
7 列出进程打开或使用的文件信息
lsof [选项]
#列出进程调用或打开的文件信息选项:
- -c 字符串:只列出以字符串开头的进程打开的文件
- -u 用户名:只列出某个用户的进程打开的文件
- -p pid:列出某个PID进程打开的文件
缓冲和缓存的区别 缓存(cache ) 是用来加速数据从硬盘中读取的 缓冲(buffer)是用来加速数据写入硬盘的
查看当前Linux系统的发现版本 lsb_release -a
判断当前系统的位数 file /bin/ls
四、系统定时任务
1 at 一次执行
① 确定 at
安装
chkconfig --list | grep atd
#at
服务是否安装service atd restart
#at
服务的启动
② at
的访问控制
- 如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件(白名单)中的用户可以使用at命令(/etc/at.deny文件会被忽略)
- 如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny文件(黑名单)中的用户不能使用at命令(注意:对root用户不起作用)
- 如果系统中这两个文件都不存在,那么只有root用户可以使用at命令
③ at
命令
at [选项] 时间
- m:当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户
- c 工作号:显示该at工作的实际内容
时间:
- HH:MM
- HH:MM YYYY-MM-DD
- HH:MM[am|pm] [month][date]
- HH:MM +[minutes|hours|days|weeks]
④ 例子
在两分钟之后执行hello.sh脚本 at now + 2 minutes
at> /root/hello.sh >> /root/hello.log
⑤ 其他at
管理命令
atq
#查询当前服务器上的at
工作atrm [工作号]
#删除指定的at
任务
2 crontab 循环定时
① crond 服务管理与访问控制
service crond restar
chkconfig crond on
② 用户的 crontab 设置
crontab [选项]
选项:
- -e:编辑crontab定时任务
- -l:查询crontab任务
- -r:删除当前用户所有的crontab任务
③ 常用命令
crontab -l
#查看root用户的crontab任务crontab -r
#删除root用户所有的定时任务crontab -e
#添加crontab任务
④ crontab 注意事项
- 六个选项不能为空
- crontab定时任务最小有效时间为分钟,最大为月
- 日期和星期最好不要同时出现
- 执行任务写绝对路径
访问控制
- 如果系统中有/etc/cron.allow文件(白名单),那么只有在此名单下的用户可以使用cron命令;
- 如果系统中没有/etc/cron.allow文件,只有/etc/cron.deny文件(黑名单),那么在此名单下的用户不能使用cron命令【对root不起作用】
- 如果系统这两个文件都不存在,那么只有root用户可以使用cron命令
crontab格式:
* * * * * 执行的任务
- 第一个*:一小时当中的第几分钟,范围0-59
- 第二个*:一天当中的第几小时,范围0-23
- 第三个*:一个月当中的第几天,范围1-31
- 第四个*:一年当中的第几月,范围1-12
- 第五个*:一周当中的星期几,范围0-7(0和7都代表星期日)
crontab 举例:
1 | - 45 22 * * * 命令:在22点45分执行命令 |
3 执行系统的定时任务的方法:
第一种:手工执行定时任务(crontab -e,默认当前用户) 第二种:系统定时任务
- 把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个
- 修改/etc/crontab配置文件(必须指定用户)
Reference:
botao 2017.11.02