您的位置:首页 > 运维架构 > Linux

Linux进程管理之

2015-09-18 17:53 681 查看
文件:是磁盘中的一段被标记的存储空间,本质上是一段数据流,这个标记叫文件名
文件名可以引用这段数据

文件存储格式:
二进制格式:
ASCII码:
可执行文件:独特格式格式ELF,
程序=指令+数据=算法+数据结构
#!:用于标记可执行二进制文件格式,指明程序执行入口,,shebang,

CPU:
特权指令,内核模式,运行内核级指令
普通指令,运行普通指令

每个进程意识不到别的进程的存在,以为只有自己和内核
线性地址空间(虚拟内存):内核为每个进程虚拟出一个内存空间,

抢占式多任务
时间片段,

任务结构:task_struct内核追踪进程:双向循环链表

进程是程序的副本,可以有多个
通过fork()生成子进程,
线程:是进程的执行流,可以共享资源

linux单内核:对线程支持不好,没有专门的线程管理工具,也看成进程,轻量级进程

进程切换:
时钟驱动,时钟中断

进程调度: 进程优先级,
140个队列,代表优先级,0-139,
实时优先级:1-99,数字越大,优先级越高
静态优先级:100-139:Nice值调整,数字越大,优先级越低
动态优先级:由内核维护,动态调整

进程分类:
cpu密集型
IO密集型

进程的状态:
运行态:running
睡眠态:sleeping
可中断睡眠:interuptible
不可终端睡眠:uninteruptible,被IO阻塞
就绪态:runnable
停止态:stopped,不可被调度并运行
僵死态:zombie,没有父进程

linux系统上除init外的所有子进程,都是由其父进程fork()自身而来,遵循cow机制,进程展现为“进程树”
linux运行中的内核的相关信息是通过/proc伪文件系统输出的,各进程都有一个以其PID命名的子目录,每个子目录中有许多文件存储了进程的相关状态信息

linux进程查看及管理工具:
pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,iostat
kill,killall

pstree命令:
进程树查看:
-p:并显示各进程的PID

ps:命令

显示的是当前进程状态信息的快照,为静态结果
$ps
如图:


解释:默认情况,ps命令只显示属于当前用户并正在当前终端中运行的进程。默认ps的话,只运行了bash 和 ps
$ps –ef


支持众多选项:
BSD风格:选项前不加“-”
SysV风格
以用户为中心组织进程状态信息显示:u
根据进程启动时是否是通过终端上的用户接口交互式启动的,进程可分为两类:
与终端相关的进程:a
与终端无关的进程:x
常用选项组合:1:axu

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAN进程的属主 进程号 占据CPU的百分比 内存的百分比 启动时间 占据CPU累计时长 启动当前进程的命令,[]表示为内核线程

VSZ:线性地址空间占用的空间大小

RSS:常用驻内存集;指不可以被交换至swap空间的数据占据空间大小;
TTY:终端
STAT:进程状态
R:运行
S:interruptible sleeping,可中断睡眠
D:uniterruptible sleeping, 不可中断睡眠
T: stopped 停止
Z: zombie 僵死
s: session leader 进程领导者

+: 前台进程,占据着某终端
l: 多线程进程
<: 高优先级进程
N: 低优先级进程

常用选项组合2: -ef ppid:父进程号
-e: 显示所有进程;
-f: 显示丰富格式信息
常用选项组合3:-eFH
-F: 显示额外信息
-H: 以层级形式显示进程间关系;

自定义需要显示的信息:axo
ps axo pid,command,psr,pri,ni
psr: 当前进程运行的CPU编号;
pri: 当前进程的优先级;
ni: 当前进程的nice值:-20, 19

3、pgrep:
语法格式:pgrep [OPTIONS] "PATTERN"
-U UID:仅显示以指定用户身份运行的进程号;可接用户名或UID
-G GID
-l: 显示PID和进程名;

4、pidof: 显示指定命令所启动的pid
pidof PROGRAM
PROGRAM: 给定命令行程序
5、top命令:
TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
有许多交互式的子命令;
P:以占据的CPU百分比大小排序;
M:以占据Memory空间大小排序;
T:CPU累积占用时间排序;

l: 是否显示系统负载行;队列长度的合理区间:CPU颗数*0.7
t: 是否显示进程摘要信息及CPU负载状态;
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
us: user space
sy: system (kernel space)
ni: nice 改变过优先级的进程占用CPU的百分比
id: idle 空闲
wa: wait io
hi: hardware interrupt 硬件中断
si: software interrupt
st: stolen, 被虚拟机“偷走”的百分比

1:是否显示负载状态;
t:是否显示CPU和进程统计信息
m: 是否显示内存相关的状态信息;
q: 退出命令
s: 修改延迟时长
k: 终止指定进程

top命令的选项:
-b: batch,批次显示
-n #: 显示的批次数量
-d #: 指明延迟时长

uptime命令: 显示当前系统时间,运行时长,登录用户数及系统平均负载;

6、htop:
交互式命令:
u: 过滤仅显示选定用户的进程;
s: 跟踪选定的进程所发起的系统调用;
l: 显示选定进程所打开的文件;
t: 显示进程的层次结构;
a: 设定进程的cpu亲缘性;(将选定的进程绑定在指定的CPU上)

选项:
-d #: 延迟时长
-u USERNAME: 仅显示指定用户的进程;
-s COLUMN: 根据指定的字段进行排序;
#:快速将光标定位之指定的PID进程上

7、vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 657680 23308 191544 0 0 8 2 15 21 0 0 99 0 0

procs
r:运行或等待cpu时间片的进程的个数
b:被阻塞(通常为等待I/O完成)的进程的长度
memory
swpd:从物理内存交互至swap中的数据量
free:未使用的内存大小
buffer:buffer空间大小,通常与缓存写操作相关
cache:cache空间大小,通常与缓存读操作相关
swap
si:swap in 数据进入swap中的数据量,通常是速率。kb/s
so:swap out 数据离开swap中的数据量,通常是速率。kb/s
io:
bi:block in:从块设备读入的数据量,通常是速率,kb/s
bo:block out:保存至块设备中的数据量,通常是速率,kb/s

in:中断发生频率。每秒的中断数
cs:context switch 上下文切换,进程切换,通常是速率,kb/s
cpu:
us:用户空间的使用率
sy:内核空间的使用率
id:空闲
wa:待运行的进程队列
st:被偷走的

使用格式
vmstat [delay [counts]]
延时刷新 刷新几次
-s:显示内存统计数据
vmstat 1
vmstat 1 3

8、 dstat: 整合了vmstat, iostat, netstat and ifstat四款工具的功能;
dstat [-afv] [options..] [delay [count]]

-c: 显示cpu性能指标相关的统计数据;
-d: 显示disk相关的速率数据;
-g: 显示page相关的速率数据;
-i: 显示interrupt相关的速率数据;
-l: 显示load average相关的统计数据;
-m: 显示memory相关的统计数据;
-n: 显示网络收发数据的速率;
-p: 显示进程相关的统计数据,
-r: io请求的速率;
-s: 显示swap的相关数据
-y: 显示系统相关的数据,包括中断和进程切换;

--top-cpu:显示最占用CPU的进程;
--top-bio:显示最消耗block io的进程;
--top-io:最占用io的进程;
--top-mem:显示最占用内存的进程;

--ipc: 显示进程间通信相关的速率数据;
--raw: 显示raw套接的相关的数据;
--tcp: 显示tcp套接字的相关数据;
--udp: 显示udp套接字的相关数据;
--unix: 显示unix sock接口相关的统计数据;
--socket:
-a: -cdngy

9、pmap: 查看指定进程的内存映射关系;
pmap [OPTIONS] pid...
-x: 显示扩展信息

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]

常用选项:
-b: 以Byte/s为单位显示网卡设备数据交换速率;
-d: 关闭磁盘I/O功能模块;
-f /PATH/TO/SOMEFILE:设置输出文件的位置及格式;
-o {HTML|CSV}:
-m: 关闭mount功能模块
-n: 关闭网络功能模块
-r: 关闭进程列表功能模块
-t #: 指定延迟时长,默认为3秒;
-1:单独显示每颗CPU相关负载数据信息;

glances支持远程模式:
即可以以C/S模式工作:
Server: 以监听模式启动glances;
Client: 以远程模式启动glances,远程连入指定服务器,并Server上的相关性能数据;

服务模式:
glances -s -B IPADDR
-B: 用于指明监听的本地地址;

客户端模式:
glances -c IPADDR
-c: 用于连入的服务器的地址;

killall -SIGNAL 进程名

信号表示方式:
(1) 完整名称,例如SIGINT
(2) 简写名称,例如INT
(3) 数据代称,例如2

常用信号:
SIGHUP: 1, 通知进程重读其配置文件以让新的配置生效,但不用重新启动进程;
SIGINT:2, 打断正在运行中的进程,相当于键盘组合键Ctrl+c
SIGKILL:9, 强行中止正在运行中的进程
SIGTERM: 15, 安全中止正在运行中的进程,kill默认使用的信号
SIGSTOP: 19, 暂停进程
SIGCONT: 18, 继续运行指定进程

二、作业
1、作业管理
前台作业:通过终端启动,并且在停止之前也会一直占据终端;
后台作业:作业启动之时与终端无关,或者是在前台启动,但启动后转为与终端无关模式运行;

如何让作业运行于后台?
1、对于已经启动并处于运行中的作业:
Ctrl+z
注意: 作业被送往后台后,默认处于stopped状态;
2、对于尚未启动的作业:
COMMAND &
注意: 此两类方式相关作业,仍然与终端相关;这意味着,终端终止,将会导致与此终端相关的所有作业被终止;
3、剥离进程与终端的关系:
nohup COMMAND &

2、作业查看
jobs:
作业号、作业状态、启动命令行程序

jobs可以显示当前shell 环境中已启动的作业状态。

用linux的时候经常会碰到类似这种情形,复制,下载一个很大的文件或编辑一个文件,任务占据着界面不能做其他操作,这个时候想不暂停或中止任务去做别的操作就可以将正在执行的命令送往后台去运行。

作业控制命令:
fg [[%]job_num]:把指定的作业调回前台;
bg [[%]job_num]:把调往后台的指定的作业启动起来,让其后台默默运行;但此作业必须支持运行于后台;
kill [%job_num]:终止指定的作业;

3、进程优先级调整:
静态优先级:
通过指定进程的nice值来调整其优先级;用户空间运行的进程一般都有其nice值;
nice值: -20, 19
优先级: 100, 139
默认启动进程时,其nice值为0, 其优先级为120;
(1) 对于尚未启动的进程:
# nice -n N COMMAND
(2) 对于已经启动并处于运行中的进程:
# renice -n N PID
注意:普通用户仅能够调大nice,调低优先级;

Linux踢出用户命令(pkill)

1. 将某个终端的用户踢出
pkill -kill -t pts/2(终端号) 或 pkill -9 -t pts/2
2. 按用户名踢出用户
pkill -kill -U test(系统用户名)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: