进程概念
内核的功用:进程管理,文件系统,网络功能,内存管理,驱动程序,安全功能等
Process:运行中的程序的一个副本,是被载入内存的一个指令集和
进程ID(Process ID,PID)号码被用来标记各个进程
UID,GID和SELinux语境决定对文件系统的存取和访问权限
通常从执行进程的用户来继承
存在生命周期
task struct:linux内核存储进程信息的数据结构格式
task list:多个任务的task struct组成的链表
进程创建:
init:第一个进程
父子关系(之后的都是其子进程)
进程:都由其父进程创建,CoW(写时复制)
进程优先级
系统优先级:数字越小,优先级越高
0-139(CentOS4,5)
各有140个运行队列和过期队列
0-98,99(CentOS)
实时优先级:99-0:值最大优先级最高
nice值:-20到19,对应系统优先级100-139或者99(-20最大,19最小)
Big O:时间复杂度,用时和规模的关系
O(1), O(logn), O(n) 线性, O(n^2) 抛物线, O(2^n)
进程内存:
Page Frame:页框,用存储页面数据,存储Page 4k
LRU:Least Recently Used 近期最少使用算法,释放内存
物理地址空间和线性地址空间
MMU:Memory Management Unit负责转换线性和物理地址
IPC:Inter Process Communication
同一主机上
signal
shm:shared memory
semophore 信号量,一种计数器
不同主机上:
rpc:remote procedure call
socket: IP和端口号
linux内核:抢占式多任务
进程类型:
守护进程:daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停与内存中,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
系统管理工具
进程的分类:
CPU-Bound:CPU密集型,非交互
IO-Bound:IO密集型,交互式
linux系统状态的查看及管理工具:
pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill
pkill,job,bg,fg,nohup
pstree命令:
pstree:以树状图的方式展示进程之间的派生关系,显示效果比较直观
-p:显示当前使用进程的进程号和进程ID
-a:显示所有进程的详细信息,遇到相同的进程可以压缩显示
ps命令
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断,删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态,进程是否结束,进程有没有僵死,那些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的
Linux系统各进程的相关信息均保存在/proc/PID目录下的个文件中
支持三种选项:
UNIX选项 如-A -e
BSD选项 如 a
GUN选项 如 –help
默认显示当前终端的进程
a:包括所有终端中进程
x:包括不链接终端的进程
u:显示进程属主的信息
f:显示进程的父进程
o 属性..:显示定制的信息
属性:pid,comm,%cpu,%mem,state,tty,euser,ruser
VAZ:Virtual memory SiZe,虚拟内存集,线性内存
RSS:ReSident Size,常驻内存集
STAT:进程状态
R:running运行态
S:interrupatable sleeping (睡眠态可中断)
D:uninterrupatable sleeping(睡眠态不可中断)
T:stopped 停止态
Z:zombie 僵死态
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader,会话(子进程)发起者
常用组合:-ef
-e:显示所有进程
-f:显示完整格式程序信息
常规格式:-eFH
-F:显示更完整格式的进程信息
-H:以进程层级格式显示进程相关信息
常用格式:自定义
ni:nice值
pri:priority 优先级
psr:procrssor CPU编号
rtprio:实时优先级
-eo pid,tid,clss,rtprio,ni,pri,psr,pcpu,stat,comm
axo atat,euid,ruid,tty,tpfid,sess,pgrp,ppid,pid,pcpu,comm
pgrep命令
pgrep命令以名称为依据从运行进程中队列中查找进程,并显示查找到的进程ID,每一个进程ID以一个十进制数表示,通过一个分隔符
和下一个ID分开,默认分隔符为一个新行。对于每一个属性选项,用户可以在命令上指定一个以逗号分隔的可能值的集合
选项:
-u uid :effective user,进程生效者
-U uid:real user,真正发起运行命令者
-t terminal:与指明终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-p pid:显示指定进程的子进程
按确切的程序名称:/sbin/pidof
uptime
显示当前时间,系统 已启动的时间、当前上线人数,系统平均负载(1 、5 、10 分钟的平均负载,一般不会超过1) )
系统平均负载:
指在特定时间间隔内运行队列中的平均进程数 。
如果 每个CPU 内核的当前活动进程数不大于3 的话,那么系统的 性能良好。 如果每个CPU 内核的任务数大于5 ,那
么这台机器的性能有严重问题。
如果linux 主机是1 个双核CPU 的话,当Load Average为6的时候说明机器已经被充分使用了。
top
实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具,通过top命令所提供的互动式界面,
可以用热键进行管理。
top有许多内置命令
排序:
P:以占据的CPU百分比,%CPU
M:占据内存百分比。%MEM
T:累积占据CPU时长,TIME+
首部信息显示:
uptime信息:l命令
task及cou信息:t命令
cpu分别显示:1(数字)
memory信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W
栏位信息简介
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间
栏位信息间接
PID (Process Id): 任务的进程ID
PPID (Parent Process Pid): 父任务的进程ID
RUSER (Real User Name): 任务的所有者真实名称
UID (User Id): 任务所有者ID
USER (User Name): 任务所有者名称
GROUP (Group Name): 任务所有者群组名
TTY (Controlling Tty): 终端
PR (Priority): 优先级
%CPU (CPU usage):CPU 使用率
%MEM (Memory usage (RES)): 内存使用率
S (Process Status): 进程状态
TIME+ (CPU Time, hundredths):CPU
选项:
-d #:指定刷新时间间隔,默认为3秒
-b:以批次方式
-n #:显示多少批次
htop命令(需Fedora-EPEL安装)
选项:
-d #:指定延迟时间
-u UserName:仅显示指定用户的进程
-s COLUME:以指定字段进行排序
交互式子命令:
各种使用命令在交互式界面都有显示,就不介绍了,一目了然!
s:跟踪选定进程的系统调用;
l:显示选定进程打开的文件列表
a:将选定的进程绑定之某指定CPU核心
t:显示进程树
内存工具
vmstat命令:虚拟内存信息,可以报告关于进程,内存,I/O等系统整体运行状态
vmstat 2 5 (没2秒显示一次,共显示五次)
字段说明:
procs(进程)
r:运行队列中进程数量,这个值也可以判断是否需要增加CPU(如长期大于1)
b:等待IO的进程数量
memory(内存)
swpd:使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能
free:空闲物理内存大小
buff:用作缓冲的内存大小
cache:用作缓存的内存大小,如果cache的值大的时候,说明cache出的文件多,如果频繁访问到的文件
都能被cache处,那么磁盘读IO bi会非常小
swap
si:每秒从交换区写到内存的大小,由磁盘调入内存
so:每秒写入交换区的内存大小,由内存调入磁盘
IO(现在的Linux版本块大小为1kb)
bi:每秒读取的块数
bo:每秒写入的块数
system(系统)
in:每秒中断数,包括时钟中断
cs:每秒上下文切换数(进程切换频率)
注意:此二选值越大,会看到内核消耗的CPU时间会越大
CPU(以百分比表示)
us:用户进程执行时间按百分比(user time)
us的值比较高时,说明用户进程消耗CPU时间多,但是如果长期超过50%的使用,那么或许就该考虑优化程序算法
或者进行加速了
sy:内核系统进程执行时间百分比(system time)
sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,应该检查下原因
wa:IO等待时间的百分比
wa的值高时,说明IO等待比较严重,这可能由于磁盘大量随机访问造成,也有可能磁盘出现瓶颈(块操作)
id:空闲时间百分比
st:Time stolen from a virtual machine. 2.6.11 前, unknown.
选项
-a:显示活动内页
-f:显示启动后创建的进程总数
-m:显示slab信息
-n:头信息仅显示一次
-s:以表格方式显示时间计数器和内存状态
-d:报告磁盘状态
-p:显示指定的磁盘分区状态
-S:输出信息的单位(k,K,m,M)
pmap命令
用于报告进程的内存映射关系,是Linux调试及运维的一个很好的工具
选项
-x:显示扩展格式
-d:显示设备格式
-q:不显示头尾行
-v:显示指定版本
系统监控工具
glances命令(EPEL安装)
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password] [-t refresh] [-f file] [-o output]
命令选项:
-b:显示网络连接速度Byte/秒
-B @IP|HOST:绑定服务器端IP地址或者主机名称
-c @IP|HOEST:连接glances服务器端
-C file:配置文件路径默认位置为/etc/glances/glances.conf
-d:关闭磁盘I/O模块
-e:显示传感器温度
-f file:设置输出文件(格式为HTML或者CSV)
-m:关闭挂载的磁盘模块
-n:关闭网络模块
-p PORT:设置客户端/服务器运行端口(默认为61209)
-P PASSWORD:设置客户端/服务器密码
-s:设置glances运行模式为服务器
-t SECONDS :设置屏幕刷新的时间间隔,单位为秒(默认为3秒),范围为1-32767
-h:显示帮助信息
-v:显示版本信息
-1:每个CPU的相关数据单独显示
glances命令的交互式界面和top命令的相似,操作方法也是类似的,显示字段意义如下:
CTRT:虚拟内存大小
RES:进程占用的物理内存值
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
PID:进程ID号
USER:进程所有者的用户名
TIME+:该进程启动后占用的总的CPU时间
IO_R和IO_W:进程那个的读写I/O速率
NAME:进程名称
NI:进程优先级
S:进程状态,其中S表示休眠,R表示正在运行,Z表示僵死状态
交互式界面下可以使用的快捷键的功能如下:
h:显示帮助信息
q:离开程序退出
c:按照CPU实时负载对系统进程进行排序
m:按照内存使用状况对系统进程排序
i:按照I/O使用状况对系统进程排序
p:按照进程名称排序
d:显示磁盘读写状况
w:删除日志文件
l:显示日志
1:每个CPU的相关数据单独显示
s:显示传感器信息
f:显示系统信息
在C/S模式下运行glances命令
服务模式:
glances -s -B IPADDR 指明监听的本机哪个地址
客户端模式
glances -c IPADDR 指明要连入的服务器端地址
dstat命令:系统资源统计
dstat [-afv] [options…] [delay [count]]
-c:显示cpu相关信息
-C #,#,…,total
-d:显示dick相关信息
-D total,sda,sdb,…
-g:显示page相关统计数据
-m:显示memory相关统计数据
-n:显示network相关统计数据
-p:显示process相关统计数据
-r:显示IO请求相关的统计数据
-s:显示swapped相关的统计数据
–tcp
–udp
–unix
–raw
–socket
–ipc
–top-cpu:显示最占用CPU的进程
–top-io:显示最占用io的进程
–top-men:显示最占用内存的进程
–top-latency:显示延迟最大的进程
备注:如果要组合使用,后面四项须放在最后
kill命令
向进程发送控制信号,以实现对进程管理
显示当前系统可用信号:kill -l
1)SIGHUP:无须关闭进程而让其重读配置文件
2)SIGINT:终止正在运行的进程;相当于Ctrl+c
9)SIGKILL:杀死正在运行的进程
15)SIGTERM:终止正在运行的进程
18)SIGCONT:继续运行
19)SIGSTOP:后台休眠
指定信号的方法:
1.信号的数字标识;1,2,9….
2.信号完整名称;SIGHUP
3.信号的简写名称;HUP
按PID:kill [-SIGNAL] pid
按名称:killall [-SIGNAL] comm….
按模式:pkill [options] pattern 按照进程名杀死进程。
-SIGNAL
-u uid:effective user,生效者
-U uid:real user,真正发起运行命令者
-t terminal:与指定终端相关的进程
-l:显示进程名
-a:显示完整格式的进程名
-P pid:显示父进程为此处指定的进程的进程列表
作业管理
Linux的作业控制
前台控制:通过终端启动,且启动后一直占据终端
后台作业:可通过终端启动,但启动后即转入后台运行(释放终端)
如何让作业运行于后台
1.运行中的作业:Ctrl+z
2.尚未启动的作业:command &
后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台
后,剥离与终端的关系
此处的ping随便有显示输出,但是已经是后台进程了 ,所以使用Ctrl+c无法终止的,正常执行ping命令是可以
使用Ctrl+c终止的
查看所有作业:
jobs
作业控制:
fg [[%]JOB_NUM] :把指定的后台作业调回前台;
bg [[%]JOB_NUM] :让送往后台的作业在后台继续运行;
kill [%JOB_NUM] :终止指定的作业;
将刚才ping命令调回前台后可以Ctrl+c终止了
并行运行
方法一:
vi all.sh
f1.sh&
f2.sh&
f3.sh&
方法二
(f1.sh&);(f2.sh&);(f3.sh&);
方法三
{ f1.sh& f2.sh& f3.sh& }
进程优先级
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120
只有根用户才能降低nice值(提高优先级)
nice命令:用于以指定的进程调度优先级启动其他的程序
nice [OPTION] [COMMAND [ARG]…]
renice 命令:
renice [-n] priority pid..
查看:
ps axo pid,comm,ni
任务计划
Linux任务计划,周期性任务执行
未来的某时间点执行一次任务
at
at命令用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。
假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)
等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。
也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。
指定的日期必须跟在指定时间的后面。
也可使用相对计时发,这对于安排不久就要执行的命令是有很好用处的。指定格式为now + count time,now是指当前时间,time是时间单位,
这里可以是mintues(分钟),hours(小时),days(天),weeks(星期)。count是时间的数量。还可以直接使用today,tomorrow来指定
完成命令的时间。
at [option] TIME
常用选项:
-V:显示版本信息
-l:列出指定队列中等待运行的作业;相当于atq
-d:删除指定的作业;相当于atrm
-c:查看具体作业任务
-f /path/from/somefile:从指定的文件中读取任务
-m:当任务被完成之后,将给用户发送邮件,即使没有标准输出
注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户
执行结果:
TIME:定义出什么时候进行at这选任务的时间
HH:MM[yyyy-mm-dd]
noon,midnight,teatime(4pm)tomorrow
now +#{minutes,hours,days,OR weeks}
at时间格式
HH:MM 02:00
在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务
HH:MM YYYY-MM-DD 04:00 2016-09-20
规定在某年某月的某一天的特殊时刻进行该项任务
HH:MM[am|pm] [Month] [Date]
04pm March 17
17:20 tomorrow
HH:MM[am|pm] + number [minutes|hours|days|weeks]
在某个时间点再加几个时间后才进行该项任务
now + 5 minutes
04pm + 3 days
执行方式:
1)交互式 2向 )输入重定向 3 )at –f 文件
依赖与atd 服务, 需要启动才能实现at 任务
at 队列存放在/var/spool/at 目录中
/etc/at.{allow,deny} 控制用户是否能执行at 任务
白名单:/etc/at.allow 默认不存在,只有该文件中的用户才能执行at 命令
黑名单:/etc/at.deny 行 拒绝该文件中用户执行 at 命令, 而没有在 在at.deny
文件中的使用 者则可执行
如果两个文件都不存在有 ,只有root行可以执行at
注意事项:
以下不包含root用户
白名单优先级高于黑名单
当白名单文件生成后,不在白名单的用户都没权限使用at了
没有白名单文件时,在黑名单的用户都没权限使用at
如果白名单和黑名单文件都不存在,则是任何人都没权限使用at
batch:系统自行选择空闲时间去执行此处指定的任务
周期性运行某任务cron
相关的程序包:
cronie:主程序包,提供crond守护进程及相关辅助工具
cronie-anacron:cronie的补充程序;用于监控cronise任务执行状况;
如cronie中的任务在过去该运行的实际带你未能正常运行,则anacron会随后启动一次此任务
crontabs:包含CentOS提供系统维护任务
计划任务
确保crond守护处于运行状态:
CentOS 7 :
systemctl status crond
CentOS 6 :
service crond status
计划周期性执行的任务提交给crond,到指定时间会自动运行
系统cron任务:系统维护作业
/etc/crontab
用户cron任务:
crontab
日志:/etc/log/cron
系统cron 任务:/etc/crontab
注释行以 # 开头
详情参见 man 5 crontab
# Example of job definition:
# .—————- minute (0 – 59)
# | .————- hour (0 – 23)
# | | .———- day of month (1 – 31)
# | | | .——- month (1 – 12) OR jan,feb,mar,apr …
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR
sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
时间表示法:
1.特定值:
给定时间有效取值范围内的值
2.*
给定时间点上有效取值范围内的所有值
表示 “每…..”
3.离散取值:
#,#,#
4.连续取值:-
#-#
5.在指定时间范围内,定义步长:
/#:#即步长(表示每…)
例如:每3小时执行一次echo命令
0 */3 * * * centos /bin/echo “howdy”
时间格式
@reboot Run once after reboot.(每次重启执行)
@yearly 0 0 1 1 (每年执行一次)
@annually 0 0 1 1 *()
@monthly 0 0 1 * *(每月执行一次)
@weekly 0 0 * * 0(每周执行一次)
@daily 0 0 * * *(每天执行一次 )
@hourly 0 * * * *(每小时执行一次)
系统的计划任务:
/etc/crontab
/etc/cron.d/ 配置文件
/etc/cron.horuly/ 脚本
/etc/cron.daily/ 脚本
/etc/cron.weedly/ 脚本
/etc/cron.monthly/ 脚本
anacron系统
运行计算机关机时cron 不运行的任务, ,CentOS6 以后 版本取消
anacron 服务,由crond 服务管理。
假设计算机没有一直开机
对笔记本电脑、台式机、工作站及其它不一直开机的系统很重要
对偶尔要关机的服务器很有用
配置文件:/etc/anacrontab ,负责执行/etc/ cron.daily
/etc/cron.weekly /etc/cron.monthly 中系统任务。
/etc/cron.hourly/ 由/cron.d/0hourly 执行
字段1 :如果在这些日子里没有运行这些任务……
字段2 :在重新引导后等待这么多分钟后运行它
字段3 :任务识别器,在日志文件中标识
字段4 :要执行的任务
当执行任务时,更新/var/spool/anacron/ 中文件的时间戳
管理临时文件
CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件
CentOS7使用systemd-tmpfiles-setup服务实现
配置文件:
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles/*.conf
/usr/lib/tmpfiles.d/tmp.conf
d /tmp 1777 root root 10d
d /var/tmp 1777 root root 30d
命令:
systemd-tmpfiles –clean|remove|create configfile
计划任务
用户cron: :
crontab 命令定义,每个用户都有专用的cron 任务文件:
/var/spool/cron/USERNAME
crontab 命令:
crontab [-u user] [-l | -r | -e] [-i]
-l: 列出所有任务;
-e: 编辑任务;
-r: 移除所有任务;
-i :同-r 一同使用,以交互式模式移除指定任务
-u user: 仅root 可运行,指定用户管理cron 任务
控制用户执行计划任务 :
/etc/cron.{allow,deny}
allow是白名单,dengy是黑名单
以下不包含root用户
白名单优先级高于黑名单
当白名单文件生成后,不在白名单的用户都没权限使用了
没有白名单文件时,在黑名单的用户都没权限使用
如果白名单和黑名单文件都不存在,则是任何人都没权限使用
at和crontab比较
一次性作业使用at
重复性作业使用crontab
备注:没有被重定向的输出或被mail给用户
root用户能够修改其他用户的作业
运行结果的标准输出和错误会以邮件的通知给相关用户
1.command > /dev/null
2.command &> /dev/null
对于cron任务来讲,%有特殊用途;如果在命令中要使用%,需要转义;但是如果把%放置在单引号中,
可以不用转义。
练习
1 、每天的2 点和12 点整,将/etc 备份至/testdir/backup目录中,保存的文件名称格式为“etcbak-yyyy-mm-dd-HH.tar.xz”
使用crontab -e命令 编辑,输入命令
0 2,12 * * * /usr/bin/tar -Jcf /testdir/backup/etcbak-`date +\%F-%\d`.tar.xz /etc/
2 、每周2, 4, 7 备份/var/log/messages 文件至/logs 目录中,文件名形如“messages-yyyymmdd”
使用crontab -e命令 编辑,输入命令
0 23 * * 2,4,7 /usr/bin/cp -a /var/log/messages /logs/messages-`date +\%Y\%m\%d`
3 、每两小时取出当前系统/proc/meminfo 文件中以S 或M开头的信息追加至/tmp/meminfo.txt 文件中
使用crontab -e命令 编辑,输入命令
0 */2 * * * /usr/bin/grep "^[SM].*" /proc/meminfo >>/tmp/memuinfo.txt
4 、工作日时间,每10 分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80% ,就执行wall
使用crontab -e命令 编辑,输入命令
*/10 * * * * /root/bin/test.sh
test.sh脚本如下
1 #!/bin/bash 2 3 disk=`df |grep "sd"|egrep -o "[[:digit:]]*%"|cut -d "%" -f1|sort -n|tail -n1` 4 5 [[ $dick -gt 80 ]]&&wall "dick will be full"
原创文章,作者:qiuwei,如若转载,请注明出处:http://www.178linux.com/44654