进程,运行中的程序,运行在自己的线性地址空间中
程序:指令加数据组成
32位主机上,1G内核使用,其余归应用程序使用
32位主机CPU能同时处理32位数据,也就是2的32次幂个地址空间,相当于4g个地址空间,所以32位主机最多能支持4g内存。
BSD风格的命令不需要加-,例如ps
SysV风格的都需要加-
fork()系统调用
任何进程的想要创建自己子进程时,需要发起fork调用,能创建和自己一样,地址空间也一样的child
Cow机制:Copy on Writting
父进程和子进程共享同一个地址空间,当任何一方的值需要变动时,就认为子进程已经成熟,父进程会为其创造其独立的地址空间
进程挂起:每次尚未处理完,产生的结果会存储到 task struck中。
进程优先级:0-139
1-99:动态优先级:数字越大优先级越高
100-139:静态优先级,数字越小,优先级越高
进程分类:
CPU bound:CPU密集型
I/O bound:密集型
进程的状态
R 运行态:running
睡眠态:sleeping
S 可中断睡眠:interruptible
D 不可中断睡眠:uninterruptible
就绪态:runnable
T 停止态:stopped,不可被调度运行
Z 僵死态:zombie,父进程死了还没释放它
s :session leader
+ :前台进程,占据某终端
l :多线程进程
< :高优先级进程
N :低优先级进程
linux是LWP: Light WEight Process
对linux而言,进程就是线程,线程就是进程。
进程查看及管理工具:top,pstree,ps,pidof,pgrep,pkill,htop,glances,pmap,dstat,iostat,sar,kill,job,bg,fg
pstree:-p能显示进程id
ps:process stat
User:属主,
PID:进程ID
%cpu:占CPU的百分比
%MEM:占内存的百分比
VSZ:虚拟内存集:线性地址空间占用的空间大小
RSS:常驻内存集:不可以被交换至SWAP空间的数据占空间的大小
TTY:终端
STAT:进程状态,上面写了
START:启动时间
TIME:累积时长
COMMAND:由哪个命令启动的,[]表示内核线程
常用格式:
aux:a与终端相关,x与终端无关,u以用户为中心
-ef:e:显示所有信息,f丰富格式信息
-eFH:F显示额外信息,H显示层级关系,查看父子进程关系
axo:自定义需要显示的信息,o:自定义字段
pgrep:用来过滤进程
-U:仅显示指定用户身份运行的进程
-l:显示进程名
pidof:显示某个程序所占据的进程号
top:动态显示第一行和uptime一样,
参数
-b:batch:分批次显示
-n:指定显示几次
-d:延时时间间隔
操作命令
P按CPU占据百分比排序,
M按内存,
T按CPU累积占用时间
l:是否显示负载行,
t是否显示摘要和CPU负载
m是否显示内存信息
q:退出
s:修改延时时常,默认是3s
k:终止指定进程
1、top:当前系统时间:运行时常:当前登入系统用户数量:负载状态(过去1分钟,5分钟,15分钟的负载,cpu上等待运行的队列长度)
2、tasks:进程数:
3、cpus,按1键显示每个cpu的状态:
运行空间cpu比例userspace,内核代码cpu比例system,nice值百分比,空闲百分比idel,等待io完成的百分比wait,硬件中断处理百分比hardwareinterface,软件中断处理百分比softwareinterface,被虚拟化偷走的时间stolen
4、swap:虚拟内存所有空间,已用空间,空闲空间
PR:优先级
NI:nice值
VIRT:虚拟内存集
RES:常驻内存集
SHR:共享内存空间
S:状态
%CPU:占据CPU百分比
%MEM:占据内存百分比
TIME:累积运行时常
COMMAND:启动命令
htop:
需要配置yum源
用法
u只显示指定用户的进程
s跟踪进程发起的系统调用,esc退出
l显示进程打开的文档
t:层次结果显示
a设定继承的CPU亲缘性
参数:
-d #:延时
-u:user
-s:根据字段排序
vmstat:
delay count
r运行队列长度
b阻塞队列长度
si:数据进入swap的速率kbps
so数据离开swap的速率kbps
bi块设备读取速率kbps
bo保存到块设备的速率kbps
in中断速率kbps
cs进程切换速率kbps
/proc/#接口
pmap 1
glances支持cs架构
常用用法
--top-cpu,显示最占cpu的信息
--top-bio,显示最小号blockio的进程
--top-io
--top-mem
--ipc显示进程间通信的相关数据
--raw显示raw套装的相关数据
--tcp显示tcp套接字的相关数据
--udp显示udp套接字的相关数据
--unix
--socket
进程间通信:
signal:短小信息,可以man 7 signal或 kill -l查看
1是重读配置文件
信号可以这样写:
1、全写SIGINT
2、简写INT
3、标号15
向进程发信号:
kill 信号 进程号
killall httpd 程序名可以关闭一组
要加个d,不然找不到
作业管理
前台:终端启动
后台:作业启动时与终端无关,或在前台启动后挂到后台继续与终端无关
已启动时:ctrl z送到后台
未启动时:可以 命令 & 让命令启动在后台,进去了就会stopped
剥离进程和终端的关系:
# nohup 命令 &
jobs可以查看后台的作业:+表示第一个出来,-表示第二个出来
fg 2可以调前台回来
bg:把调往后台的指定作业启动起来,让它在后台运行
kill %#终止指定作业
进程优先级调整:
用nice值调整:只可以调大,优先级调小
nice值: -20,19
优先级: 100,139
尚未启动的进程:
nice –n N 命令
对已经启动的进程:
renice –n N PID
原文地址:http://korekara.blog.51cto.com/8206017/1697264