进程ID(process ID,PID)号码被用来标记各个进程
UID,GID和SELinux语境决定文件系统的存取和访问权限
一般从执行进程的用户来继承
存在生命周期前端
系统中的第一个进程时全部的进程的父进程,其它进程都须要在它之下建立进程,与其它进程的关系是父子关系,进程都由其父进程建立第一个进程被杀死其它全部进程都会崩溃
Centos6与以前
Init:第一个进程
Centos7
Systemd:第一个进程ios
进程优先级:数字越小,优先级越高
0-139(centos 4,5)
各有140个运行队列和过时队列
0-98,99(centos6,7)
实时优先级:99-0 值越大优先级越高
Nice值:-20-19,对应系统优先级100-139或99vim
守护进程:在系统引导过程当中启动的进程,和终端无 关进程
前台进程:跟终端相关,经过终端启动的进程
注意:二者可互相转化centos
运行态:running
就绪态:ready
睡眠态:可中断:interruptable
不可中断:uninterruptable
中止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭安全
CPU-Bound:CPU密集型,非交互
IO-Bound:IO密集型,交互bash
pstree:显示进程树(以树状图的方式显示进程)
ps:查看进程状态
Linux系统各进程的相关信息均保存在/proc/PID目录下 的各文件中服务器
ps [选项]
ps支持三种选项:
UNIX选项 如-A -e
BSD选项 如a
GNU选项 如--help
BSD方式
ps 单独一个ps显示当前终端上运行的全部进程
a 全部用户在全部终端上运行的前台进程
x 当前用户运行的全部进程(包括前台进程和后台daemon)
u 选项显示进程全部者的信息
k [属性]: 对属性排序;例:ps k %cpu 按CPU使用率排序
- - sort [属性]: 对属性排序;例:ps - -sort %cpu
ax 全部用户运行的全部进程
aux 全部用户运行的全部进程,结果中显示用户名
f 显示父子进程关系
-C <命令关键字> :用进程名进行过滤
axo配合
o [属性]:自定义输出列,能够跟多个属性,属性与属性之间以逗号分隔
%cpu:CPU使用率
%mem:内存使用率
pid:进程号
uid:进程的所属用户的ID号
user:进程所属主
gid:进程的所属组的组ID
group:进程所属组
cmd:命令的参数,命令的字符串;同args同样
comm:显示命令的名字
tty:显示执行终端
ruser:命令的发起人
euser :命令的真正执行行
vsz:虚拟内存集
rss:常驻内存集
stat:进程状态
ni: nice值
pri: priority 优先级
psr: processor CPU编号
rtprio: 实时优先级
这些属性就是显示的自定义的列信息,以下图红框所框之处
UNIX方式:
-a 全部用户在全部终端上运行的前台进程
-x 当前用户运行的全部进程(包括前台进程和后台daemon)
-ax 全部用户运行的全部进程
-aux 全部用户运行的全部进程,结果中显示用户名
-f 显示当前终端上运行的全部进程
-e 显示全部进程
-f 显示完整格式程序信息
-F: 显示更完整格式的进程信息
-H: 以进程层级格式显示进程相关信息(显示父子关系)
-ef 以完整格式显示全部进程
-eF 以更完整格式显示全部进程
-efH 显示父子进程关系
-eo 自定义显示结果,以下
ps -eo %cpu,%mem,pid,nice,pri,stat,comm,vsz,rss,stat 网络
STAT :进程状态
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前台进程
l: 多线程进程
L:内存分页并带锁
N:低优先级进程
<:高优先级进程
s: session leader,会话(子进程)发起者 session
进程优先级调整
静态优先级:100-139
进程默认启动时的nice值为0,优先级为120
只有根用户才能下降nice值(提升优先性)
nice 命令:
nice [选项] pri [cmd [arg]] :在执行命令时设定它的nice值(pri:nice值;cmd:命令;arg:参数)
renice 命令
renice [-n] pri pid:从新设置一个进程的nice值(pri:nice值;pid:进程的进程号)
查看:
ps axo ni:查看nice值数据结构
最灵活:ps 选项 |其余命令
按预约义的模式:pgrep(pgrep仅适用于匹配进程信息)
pgrep [option] pattern
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal: 与指定终端相关的进程
-l: 显示进程名
-P pid: 显示指定进程的子进程
按确切的程序名称:/sbin/pidof
pidof bash :根据命令名来搜索出该命令的进程的pid(bash:命令名)
uptime
显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(一、五、10分钟的平均负载,通常不会超过1)
系统平均负载:
指在特定时间间隔内运行队列中的平均进程数
一般每一个CPU内核的当前活动进程数不大于3,那么系统的性能良好。若是每一个CPU内核的任务数大于5,那么此主机的性能有严重问题
若是Linux主机是1个双核CPU,当load average为6的时候说明机器已经被充分使用
ps 这个工具查看进程只是临时的,只能查询出执行命令那一刻的全部进程,却不是实时刷新的,有些死板,下面介绍一个top工具,它能够实时查询进程信息,更加方便咱们的管理
top [选项] [参数]
-d #:指定刷新时间间隔,#秒刷新一次,单位为秒,默认为3秒
-b:所有显示全部进程
-n # :刷新多少次后退出
排序:
P:以占据CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
首部信息显示:
l:uptime信息
t:tasks及CPU信息
1:CPU分别显示
m:memory信息(内存)
q:退出命令
s:修改刷新时间间隔
k:终止指定进程
W:保存文件
us:用户空间
sy:内核空间
ni:调整
nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间
除了top外还有一个top的加强版命令htop,系统默认状况下没有安装,须要epel源来进行安装,这里不作epel的配置,直接经过yum install htop命令进行安装,安装后直接执行htop命令便可,htop较之top有了颜色,显示界面上也更加好看。
-d #: 指定延迟时间;#秒后
-u UserName: 仅显示指定用户的进程
-s COLUME: 以指定字段进行排序
s: 跟踪选定进程的系统调用
l: 显示选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t: 显示进程树
#:快速定位光标至PID为#的进程上
h:帮助信息,显示该模式下的全部子命令
q:退出
vmstat命令主要用来动态的显示当前系统资源的使用状况,也就是虚拟内存信息,这些资源包括:内存、磁盘、网络、cpu等资源。
-s:将一些时间致使的内存变化状况列表说明
-S:后面能够跟单位;如K、M取代bytes的容量;例:vmstat -S K
-d:列出磁盘的读写总量统计表
#1 #2:#1,#2是两个数字,#1秒刷新一次,刷新#2次,将刷新的当前系统资源的使用状况显示出来
procs:
r:可运行(正运行或等待运行)进程的个数,和核心数有关
b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
memory:
swpd: 交换内存的使用总量
free:空闲物理内存总量
buffer:用于buffer的内存总量
cache:用于cache的内存总量
swap:
si:从磁盘交换进内存的数据速率(kb/s)
so:从内存交换至磁盘的数据速率(kb/s)
io:
bi:从块设备读入数据到系统的速率(kb/s)
bo: 保存数据至块设备的速率
system:
in: interrupts 中断速率,包括时钟
cs: context switch 进程切换速率
cpu:
us:user space,用户运行程序占用CPU的百分比
sy: system(kernel space),用于运行内核占用CPU的百分比
id: idle,空闲CPU百分比
wa: wait IO,等待I/O花费时间
st: stolen,被虚拟机‘偷走’的百分比
Iostat:统计CPU和设备IO信息
示例:iostat 1 10 :每一秒刷新一次统计出的CPU和设备信息,并显示10次后自动退出
pmap命令用来显示当前正在运行的某一个进程所对应使用的内存的映射
pmap [选项] PID [...]
-x:显示详细格式的信息
示例:pmap 1:显示进程号为1的进程对应的内存映射
另外一种实现方法
cat /proc/PID/maps :PID为要查看的进程的PID
glances是一款用于Linux、BSD的开源命令行系统监控工具,它使用Python语言开发,可以见识CPU、负载、内存、磁盘I/O、网络流量、文件系统、系统温度等信息,优势是glances能够实时的显示重要的系统信息,并每隔2秒动态刷新,它也不会消耗大量的CPU资源;可是glances在默认状况下并不会安装,须要自行安装,
-b: 以Byte为单位显示网卡数据速率
-d: 关闭磁盘I/O模块
-f /path/to/somefile: 设定输入文件位置
-o {HTML|CSV}:输出格式
-m: 禁用mount模块
-n: 禁用网络模块
-t #: 延迟时间间隔
-1:每一个CPU的相关数据单独显示
glances支持远程模式,便可以以C/S模式工做
服务器模式:
glances -s -B IP
IP:指明监听的本机哪一个地址
客户端模式:
glances -c IP
IP:要连入的服务器端地址
dstat命令是一个能够取代vmstat,iostat,netstat和ifstat这些命令的多功能产品,dstat能够实时的看到全部系统资源,以列表的形式为你提供选项信息并清晰地告诉你是在何种幅度和单位显示输出,默认状况下每秒刷新一次,并显示结果Ctrl+C退出,dstat在centos6和centos7系统上默认状况下是没有被安装的,须要自行安装后使用
短选项
-c: 显示cpu相关信息
-C #,#,...,total
-d: 显示disk相关信息
-D total,sda,sdb,...
-g:显示page相关统计数据
-m: 显示memory相关统计数据
-n: 显示network相关统计数据
-p: 显示process相关统计数据
-r: 显示io请求相关的统计数据
-s: 显示swapped相关的统计数据
长选项
- -tcp:显示tcp套接字的相关的数据
- -udp:显示udp套接字的相关的数据
- -unix:显示unix sock接口相关的统计数据
- -raw:显示raw套接字的相关的数据
- -socket:
- -ipc:显示进程间通讯相关的速率数据
- -top-cpu:显示最占用CPU的进程
- -top-io: 显示最占用io的进程
- -top-mem: 显示最占用内存的进程
- -top-latency: 显示延迟最大的进程
Total-cpu-usage:cpu的使用率
Dsk/total:磁盘读写速度
Net/total:网络设备发送和接收的数据总数
Paging:系统的分页活动,分页指的是一种内存管理技术用于查找系统场景,一个较大的分页代表系统正字使用大量的交换空间,或者说内存很是分散,大多数状况下你都但愿看到page in(换入)和page out(换出)的值是0 0.
System:这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值一般表示大量的进程形成拥塞,须要对CPU进行关注。服务器通常状况下都会运行一些程序,因此这项老是显示一些数值。
所谓进程管理就是向进程发送一些控制信号,来完成对进程的管理控制,咱们能够经过kill 命令来显示当前系统可用的信号,以及向进程发送信号指令
kill -l :显示当前系统可用信号
trap -l:显示当前系统可用信号
经常使用的信号:
SIGHUP:1, 无须关闭进程而让其重读配置文件
SIGINT:2, 停止正在运行的进程;至关于Ctrl+c
SIGQUIT:3,至关于ctrl+\
SIGKILL:9, 强制杀死正在运行的进程
SIGTERM:15,终止正在运行的进程
SIGCONT:18,继续运行
SIGSTOP:19,后台休眠
仅能管理一个进程
能够管理全部的关于cmd的进程,包括不一样终端的cmd进程
-SIGNAL(能够省略,省略时默认为9 SIGKILL)
选项
-u uid: 生效者的进程
-U uid: 真正发起运行命令者的进程
-t terminal: 与指定终端相关的进程,例:pkill -t pts/1
-l: 显示进程名(pgrep可用)
-a: 显示完整格式的进程名(pgrep可用)
-P pid: 显示指定进程的子进程
前端做业:经过终端启动,且启动后一直占据终端
后台做业:可经过终端启动,但启动后即转入后台运行(释放终端)
1.运行中的做业:Ctrl +Z(中断进程,使其再也不运行,但依然在后台有这个进程)
2.还没有启动的做业:cmd &(在后台执行该命令,可是依然在终端上显示执行结果,但不影响在终端上输入其余命令并执行)
后台做业虽然被送日后台运行,但其依然与终端相关;退出终端,将关闭后台做业,若是但愿送日后台且剥离与终端的关系.
nohup COMMAND &>/dev/null &
screen;COMMAND
fg [[%]JOB_NUM]:把指定的后台做业调回前台
bg [[%]JOB_NUM]:让送日后台的做业在后台继续运行
kill [%JOB_NUM]: 终止指定的做业(JOB_NUM:做业号)
方法1 把其它须要运行的全部命令编辑到多个脚本中,而后在编辑一个脚本,在这个脚本里执行全部的脚本 vim all.sh F1.sh& F2.sh& F3.sh& 方法2 编写多个脚本,在命令行中写一行一次性执行全部的脚本 (f1.sh&);(f2.sh&);(f3.sh&) 方法3 { f1.sh& f2.sh& f3.sh& }