linux进程及作业管理
cpu指令权限等级:
特权级也叫hierarchical protection domains, 有的也叫用户态. 是一种用来保护数据和阻止恶意行为的机制. 电脑操作系统提供不同权限访问级别的资源. 特权级分为四级, 特权级0,1,2,3. 在windows中只使用特权级0和特权级3, 特权最高的是特权级0, 可以直接操作硬件, 如CPU和内存, 一般操作系统和驱动运行在此级别下. 特权级3是给一般用户程序使用的, 可以调用基本的cpu指令
kernel –> ring0 –> ring1 –> ring2 –> ring3
linux系统的组成部分: 内核 + 根文件系统
内核的功用: 进程管理、内存管理、网络协议栈、文件管理
用户模式
内核模式
模式切换
Process: 运行中的程序的一个副本;进程有自己的生命周期
linux内核存储进程信息的固定格式: task struct
多个任务的task struct 组件的链表: task list
进程创建:
init进程: 初始化进程, 是内核加载的第一个进程, 是其他所有进程的父进程
进程: 都是由其父进程创建
fork(), clone()
进程优先级:
1-139:
0-99: 实时优先级
100-139: 静态优先级; 数字越小, 优先级越高
nice值:
-20, 19
Big O标准: 衡量进程消耗的时间
O(1), O(logn), O(n), O(n^2), O(2^n)
进程内存:
Page Frame: 页框, 用于存储页面数据
存储Page
MMU: Memory Management Unit, 内存管理单元
IPC机制: Inter Process Communication(进程通信)
同一主机上:
signal
shm: share memory
semerrohor(老式)
不同主机:
rpc机制: remote procecure call, 远程过程调用
socket: 套接字通信,
linux内核: 抢占式多任务进程
进程类型:
守护进程: daemon, 在系统引导过程中启动的进程, 跟终端无关的进程
前台进程: 跟终端相关, 通过终端启动的进程
注意: 也可把在前台启动的进程送往后台, 以守护模式运行
进程状态:
运行态: running
就绪态: ready
睡眠态:
可中断睡眠: interruptable
不可中断睡眠: uninterruptable
停止态: 暂停于内存中, 但不会被调度, 除非手动启动; stopped
僵死态: zombie
进程的分类:
CPU-Bound
IO-Bound
linux上的进程查看及管理工具:
pstree,ps,pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, jobs, bg, fg, nohup, nice, renice, kuillall, …
CentOS 5: SysV init
CentOS 6: upstart
CentOS 7: systemd
/sbin/init
1、pstree:
显示进程树
2、ps – report a snapshot of the current process. 报告当前进程的快照
/proc/: 内核中的状态信息
内核参数: 可设置其值从而调整内核运行特性的参数; /proc/sys/
状态变量: 其用于输出内核中统计信息或状态信息, 仅用于查看
参数: 模拟成文件系统类型;
进程: /proc/#
#: 进程PID
用法:
ps [OPTIONS]
选项有三种风格:
UNIX options
BSD options
GNU long options
启动进程的方式:
系统启动过程中自动启动: 与终端无关的进程;
用户通过终端启动: 与终端相关的进程;
选项:
a: 所有与终端相关的进程
x: 所有与终端无关的进程 u: 以用户为中心组织进程状态信息显示; 并显示出是哪个用户的名称
常用组合1: aux 三个选项通常组合起来使用
STAT: 进程状态
R: running
S: interruptable sleeping
D: uninterruptable sleeping
T: Stopped
Z: zombie
+: 前台进程
l: 多线程进程
N: 低优先级进程
<: 高优先级进程
s: session leader
TIME: 累计占用CPU的时间
COMMAND: 由哪个命令启动的进程, 其中带[]的表示内核线程
VSZ: 虚拟内存集, 占用的内存大小
RSS: 常驻内存集, Resident Size, 不能移动到交换内存中
-e: 显示所有进程
-f: 显示完成格式的进程信息
-ef: 显示完成格式的所有进程的信息
STIME: 启动时间
TIME: 累计运行的时间
C: CPU的占用百分比, cpu utilization
-F: 显示完成格式的进程信息
ps -eF
PSR: 显示运行在哪颗CPU上
-H: 以层级结构显示进程的相关信息, 显示父进程和子进程的层级结构
o field1, field2, …: 自定义要显示的字段, 各选项之间以 , 间隔
常用fields: pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
ni: nice值;[-20,19]
priority: 优先级
rtprio: real time priority, 实时优先级
常用组合:
ps -eFH
ps -eo
ps axo
3、pgrep、pkill – 查询进程或者向进程发送信号
– look up or signal processes based on name and other attributes
pgrep [option] pattern
选项:
-u UID: effective user显示指定用户的进程
-U UID: 以谁的身份启动, 真正的用户
-t TERMINAL: 与指定的终端相关的进程
-l: 显示进程名
-a: 显示完整格式的进程名
-P PID: 显示其父进程, 显示此进程的子进程
4、pidof – 取指定进程名称的PID
5、top – display linux processes, 动态显示进程信息
排序方式:
P: 以占据CPU的百分比
M: 以占用内存百分比
T: 以累计占用CPU时间进行排序
首部信息:
uptime信息, l 命令: 显示系统时间, 运行时长和平均负载
过去一分钟, 五分钟, 15分钟的平均负载
等待运行的进程队列的长度
tasks及cpu信息, t 命令:
us: 用户占用的空间百分比
sy:
ni: 硬件中断
si: 软件中断
st: 被偷走的百分比
内存及CPU信息, m 命令
PID:
PR: 优先级
NI: nice值
RES: 常驻内存集
VIRT: 虚拟内存集
SHR: 共享内存空间
S: 当前状态
退出 q
修改刷新时间间隔: s 输入时间间隔
终止指定的进程: k
选项::
-d #: 指定刷新时间间隔,默认3秒
-b: 以批次方式显示
-n #: 显示多少批次
uptime 命令
内核的功能: 进程管理(进程调度)
进程调度: 保存现场, 恢复现场
task struct: 任务结构
task list: 任务列表
CPU : us, sy, ni, id(空闲时间比例), hi, si, cs(处理上下文切换消耗的时间百分比) ,st(虚拟化技术分走的比例)
Memory: VSZ(虚拟内存集), RSS(常驻内存集), SHM(共享内存集)
命令: pstree, pgrep, pkill, ps, top, uptime
linux进程及作业管理(2)
epel yum仓库
$releasever: 发行的主版本号
$basearch: 架构
1、 htop:
-d #: 指定延迟时间的间隔
-u UserName: 仅显示指定用户的进程
-s COLUME: 以指定的字段进行排序
子命令:
F1: 获取帮助
l: 显示选定的进程打开的文件列表
s: 跟踪选定的进程执行的系统调用
F5 | t: 以树状结构显示进程的层级结构
a: 将选定的进程绑定至某指定的CPU核心
F2: 设定
2、vmstat – 报告虚拟内存的统计数据
vmstat [options] [delay[count]]
delay[count] :
delay: 延迟时间
count: 以delay指定的延迟时间显示的次数
proc:
r: running, 处于等待运行的进程的个数, cpu上等待运行的任务的队列长度
b: 处于不可中断睡眠态的进程的个数, 被阻塞的任务队列的长度
memory:
swpd: 交换内存的使用总量
free: 空闲的物理内存总量
buffer: 用于buffer的内存总量
cache: 用于cache的内存总量
swap:
si: 数据进入swap中的数据的速率(kb/s)
so: 数据离开swap的速率(kb/s)
io:
bi: 从块设备读入数据到系统的速率(kb/s)
bo: 保存数据至块设备的速率(kb/s)
system: 数据尽量小一些好, 数值变大,说明CPU功能不足
in: interrupts, 中断速率
cs: context switch, 上下文切换的速率
cpu:
us: user space, 用户空间
sy: system
id: idle, 空闲的
wa: wait, 等待完成
st: stolen, 虚拟化技术占用的比例
option:
-s: 显示内存统计数据
3、pmap – 报告内存的映射表, report memory map of a process
pmap [option] pid […]
-x: 显示详细格式的信息
另一种查看方式: cat /proc/<PID>/maps
4、glances – A cross-platform curses-based monitoring tool, 一个跨平台的工具
内建命令
常用选项:
-b: 以Byte为单位显示网上数据速率
-d: 关闭磁盘I/O模块
-m: 关闭mount模块
-n: 关闭network模块
-t #: 刷新时间间隔
-1: 每个cpu的相关数据单独显示
-o {HTML|CSV}: 输出格式
-f /PATH/TO/SOMEDIR: 设定输出文件的位置
C/S模式下运行glances命令:
服务模式:
glances -s -B IPADDR
IPADDR: 本机的某地址, 用于监听
客户端模式:
glances -c IPADDR
IPADDR: 远程服务器的地址
5、dstat – versatile tool for generating system resource statistics,
dstat [-afv] [options..] [delay [count]]
常用选项:
-c, –cpu: 显示cpu的相关信息
-C #, #,…,total
-d, –disk: 显示磁盘的相关信息
-D sda, sdb,…total
-g: 显示page相关的速率数据
-m: Memory的相关统计数据
-n: Interface的相关统计数据
-p: 显示process的相关统计数据
-r: 显示io请求的相关的统计数据
-s: 显示swapped的相关统计数据
–tcp
–udp
–raw
–socket
–ipc
–top-cpu: 显示最占用CPU的进程
–top-io: 最占用IO的进程
–top-mem: 最占用内存的进程
–top-lantency: 延迟最大的进程
6、kill – terminate a process
用于向进程发送信号, 以实现对进程的管理
显示当前系统可用信号
kill -l[signal]
每个信号的标识方法有三种:
(1)信号的数字标识
(2)信号的完成名称
(3)信号的简写名称
向进程发送命令
kill [-s signal | -SIGNAL] pid…
常用信号:
(1)SIGHUP: 无须关闭进程而让其重读配置文件
(2)SIGINT: 终止正在运行的进程, 相当于ctrl+c
(9)SIGKILL: 强制终止、杀死运行中的进程;
(15)SIGTERM: 终止正在运行中的进程, 一般是后台进程
(18)SIGCONT: 继续运行停止的后台进程, 可以使用 fg
(19)SIGSTOP: 停止在前台运行的进程, 送到后台, 可以使用ctrl + z
7、killall – kill processes by name
killall [-SIGNAL] <program name>
linux系统作业控制
job:
前台作业(foreground): 通过终端启动, 且启动后会一直占据终端
后台作业(background): 可以通过终端启动, 但启动后即转入后台运行(释放终端)
如何让作业运行于后台?
(1)运行中的作业
ctrl + z
注意: 送往后台后, 作业会转为停止态
(2)尚未启动的作业
#COMMAND &
注意: 此类作业虽然被送往后台, 但其依然与终端相关; 如果希望把送往后台的作业剥离与终端的关系:
# nohup COMMAND &
查看所有的作业:
jobs
可实现作业控制的命令
fg [[%] JOB_NUM]: 把指定的作业调回前台
bg [[%] JOB_NUM]: 让送往后台的作业在后台继续运行
kill [% JOB_NUM]: 终止指定的作业
进程优先级调整
可通过nice值调整的优先级范围: 100-139
分别对应于: -20, 19之间
进程启动时, 其nice值默认为0, 其优先级是120
nice – 以指定的nice值启动并运行命令
nice [options] [command [ARGU…]]
常用选项:
-n NICE: 指定nice值
注意: 仅管理员可以调低nice值
renice – 调整运行中的进程的优先级
renice [-n] NICE PID…
查看Nice值和优先级:
ps axo pid,ni,priority,comm | grep …
原创文章,作者:black_fish,如若转载,请注明出处:http://www.178linux.com/47266