一.进程管理
进程类型:
守护进程,前台进程。
进程状态:
运行状态:running
就绪状态:ready
睡眠状态:
可终断:interruptabe
不可中断:uninterruptabe
停止状态: 暂停与内存,但不会被调度,除非手动启动
僵死状态:结束进程,父进程结束前 ,子进程不关闭
LRU:近期最少使用算法:
(1)例如有1 2 3 4四个进程首先程序在最近调用了一次4进程
(2)程序排序变化为4 1 2 3此时三排在最后将被删除4 1 2
(3)在接着如果2不被调度也会被删除,但是如果2被调度一次
(4)排序方式为2 4 1 随后1 进程会被删除。
ps显示当前进程状态的介绍:
BSD方式
a 所有用户在所有终端上运行的前台进程
x 当前用户运行的所有进程(包括前台进程和后台daemon)
ax 所有用户运行的所有进程
aux 所有用户运行的所有进程,结果中显示用户名
f 显示父子进程关系
-C 用进程名进行过滤
axo配合
o 自定义输出列
%cpu
%mem
pid
uid
gid
cmd
comm
tty 显示终端名,如为?,表示daemon后台进程
ruser 命令的发起人
euser 命令的真正执行人
state
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前台进程
l: 多线程进程
L: 内存分页并带锁
N:低优先级进程
< :高优先级进程
S : session leader, 会话(子进程)发起者
例如: root@localhost rc5.d]# ps axo %cpu,%mem,pid,comm
root@localhost rc5.d]# ps axo %cpu,%mem,pid,comm k -%cpu
[root@lo calhost rc5.d]# ps axo %cpu,%mem,pid,euser,ruser,comm k -%cpu |grep passwd 其中euser是命令的执行者 ruser命令的发起者
k 排序或--sort
echo $$ 显示当前运行进程的进程号
VSZ:虚拟内存集,线性内存 表示操作系统承诺内存集
RSS:常驻内存集 实际分配内存
UNIX方式:
-e 显示所有进程
-f 显示完整格式
-ef 以完整格式显示所有进程
-eF 以更完整格式显示所有进程
-efH 显示父子进程关系
-eo 自定义显示结果,如下
ps -eo %cpu,%mem,pid,nice,pri,stat,comm
二.进程搜索工具:
pgrep :
-u :UID/username 基于执行程序的用户名进行搜索
-l : 显示的结果中显示进程名 例如:[root@localhost ~]# pgrep -lu root
-t 终端名 : 指定终端相关的进程
-l : 显示进程名
-a : 显示完整格式的进程名
-p pid : 显示制定进程的子进程
Pidof 进程名 查询对应进程名的PID 例如:pidof ping 也可以用此命令帮助杀死进程:[root@localhost ~]# kill -9 $(pidof ping)
Uptime(cpu的信息) :
[root@localhost ~]# uptime
16:59:03 up 5:49, 3 users, load average: 0.07(一分钟内负载 ), 0.04(五分钟内负载), 0.05(十五分钟内负载)
通常当一天内负载不大于3表示cpu性能比较好
三.进程优先级
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120. 只有根用户才能降低nice值。
Nice命令:
在执行nice命令前我们要先查出进程的进程号:ps -ef |grep ping
然后再更改nice值:renice -n -20 38650 即可
nice值:
-20~19
数字越小,优先级越高
renice -n # (-20~19) pid (进程如果处于活动状态用此命令)
nice -n #(-20~19) -# command
查看方式
ps axo ni[ce]
四.linux进程查看管理工具:
例如:vmstat 2 5 :每两秒刷新一次刷新五次停止
vmstat命令中各选项意思:
vmstat [操作][delay [count]]
procs
r;等待运行的进程的个数
b : 阻塞队列长度 ,即是处于不可中断睡眠态的进程个数
memory:
swpd:虚拟内存使用的总量
free:物力内存空闲总量 ,直至不够时,才会使用虚拟内存
buff:用于baffer的内存总量
cache: 用于cache的内存总量
swap
si:数据进入swap中的数据速率(kb/s)
so:数据离开swap中的数据速率
io
bi:从块设备读入数据到系统的速率(kb/s)
bo: 保存数据至块设备的速率
system
in:interrupts,中断速率
cs: context switch,进程切换速率
cpu:
us 用户空间占据比例
sy 内核空间占据cpu比例
id 空闲比率
wa 等待I/O完成所消耗的时间比例
st:被虚拟化偷走的时间比例
vmstat命令选项:
-s :显示内存的统计数
iostat
pmap pid
pmap -x pid
ls -l /proc/40052/fd |wc -l
通过查看进程文件描述符的数量是否增长来判断是否有内存泄露的问题
glances 命令:
c/s模式下运行glance命令
服务模式:
glances -s -B ip地址 :监听本机的某个地址
客户模式
glances -c 要连接的服务器ip地址 :不安全建议使用-p 或者换一个端口。
长用选项
-b :以Byte即字节为单位显示网卡数据速率;
-d :关闭磁盘I/O模块
-f /path/to/somefile: 设定输出文件位置
-o {HTML|CSV}:输出格式
-m :禁用mount模块
-n :禁用网络模块
-t # :延迟时间间隔
-1(数字) :每个cpu的相关数据单独显示;
dstat命令:
dstat [-avf] [options...] [delay[count]]
dstat -D total,sda 但都查看sda的信息
常用选项:
-c:显示cpu相关信息
-C #,#,...,total
-d : 显示disk相关信息
-D total,sda,sdb,...
-g:显示页面相关数据
-i:显示中断的统计数据
-l:1,5,15,数据信息
-m:显示memory相关统计信息
-n:显示network相关统计信息
-p:显示新建进程的统计数据
-r:I/O请求相关统计数据
-s : 交换内存相关统计数据
--tcp
--udp
--unix
--raw
--socket:相当于--tcp,--udp, --raw
--ipc :进程间通信的相关信息统计
--top-cpu:查看最消耗cpu的进程
--top-io:显示最占用io的进程
--top-mem :显示最占用内存的进程;
--top-lantency:显示延迟最大的进程
kill命令:
-0 无作为,可以用来单纯判断进程是否运行.
-1 -HUP:强制进程重读配置文件
-2 -INT: 中止正在运行的进程;相当于Ctrl+c
-3 -QUIT: 相当于ctrl+\
-9 -KILL: 强制杀死正在运行的进程
-15 -TERM: 终止正在运行的进程 (默认)\
killall 进程名
pkill
-u 用户名 杀死指定用户所运行的所有进程
pkill -t pts/1 杀死指定终端上运行的所有进程
五:linux的作业控制:
ctrl+z 将运行在前台的进程暂停 或 kill -19 PID
bg 将在当前终端上暂停的进程,放入后台继续运行 或kill -18 PID
fg 将在当前终端上暂停的或在当前终端上后台运行的进行,放入前台继续运行
jobs :查看当前终端所有作业
使进程不再依附于终端在后台运行
nohup command &> /dev/null
screen; command
(command&)
并行运行多条命令
三种方法
vim all.sh
sh1&
sh2&
shn&
(sh1&);(sh2&)
{sh1&sh2&sh3}
六:linux的计划任务:
1.at命令:
at version 3.1.13
-l :列出指定队列中等待运行的作业,相当于atq
-d #(作业编号):删除指定的作业;相当于atrm
-c : 查看具体作业任务
-f /path/from/somefile: 从指定文件中读取任务
[root@localhost app]# at -f /app/renwu.sh 19:23
job 9 at Sat Mar 17 19:23:00 2018
-m:当任务完成时,给用户发邮件,即使没有标准输出
注意:作业执行命令结果中的标准输出和错误以邮件的方式通知给相关用 户。
2.at执行的方式:
(1).交互式
(2).输入重定向
例如:[root@centos7 ~]# at 20:00 << EOF
> wall hello
> wall 123
> wall nihao
> EOF
(3).at -f 文件
例如:at 20:00 -f at.txt
(4).at队列存放在/var/spool/at目录中
基于某个时间点上在加时间:at now+5minutes 现在的时间点上 加五分钟即五分钟后执行此任务
at 02pm + 3days 三天后的下午两点执行此任务。
3.at任务执行的条件及限制:
(1)at的任务是否能运行依赖于atd服务
centos6: service atd start
centos7: systemctl start atd
(2)限制用户不能使用at配置计划任务
(2.1)当仅/etc/at.deny 存在时(默认)写入deny的用户不能配置at
(2.2)当/etc/at.allow存在时/etc/at.deny失效,只有写在allow中的用户才能配置at
(2.3)当/etc/at.allow及/etc/at.deny都不存在时,仅有root才能配置:;::::::
4.周期性计划任务:
(1)/etc/crontab 系统级计划任务
(2)当要添加计划任务时可以编辑 vim /etc/crontab 进入后在里面加入你想添加的计划任务。其中时间格式为:分钟 小时 天 月 周。/etc/crontab文件仅root可以编辑,但是可以以普通用户的身份执行任务中的计划,它的日志存放在/var/log/crond中
5.cron中的时间标示法:
(3.1)特定值:
给定时间点有效取值范围内的值
(3.2)*
表示时间上有效取值范围内的所有值:表示“ 每...”
(3.3)离散取值
#,#,# 表示某几个时间点
(3.4)连续取值
#-# :表示某范围内的时间点
(3.5)指定时间范围上定义歩长
*/# :#即为歩长
6.特殊的日期表达方式
@reboot Run once after reboot. 当下次启动计算机时,启动到crond服务时运行该计划。
@yearly 0 0 1 1 *
@annually 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily 0 0 * * *
@hourly 0 * * * *
7.当我们不小心写了一个开机重启的死循环任务时解救方法:
centos7:
1.按 e 键进入grub : linux16 最后加上空格rd.break 按Ctrl + x
2.mo unt -o remount,rw /sysroot
3.vi /sysroot/etc/crontab
centos6:
1.按 e 键进入grub : kernel 最后加空格1 先Esc加到主界面 再b启动
2.vim /1etc/crontab
8.限制用户不能使用crontab配置计划任务:
(1)当仅/etc/cron.deny 存在时(默认)写入deny的用户不能配置crontab
(2)当/etc/cron.allow存在时/etc/cron.deny失效,只有写在allow中的用户才能配置crontab
(3)当/etc/cron.allow及/etc/cron.deny都不存在时,仅有root才能配置crontab