一、程序与进程
1、程序
程序是为了达到特定的目的,可以被计算机运行并且由命令代码组成的语句序列。
程序由指令和数据组成。
指令:用于调度CPU工作,使CPU可以处理所需要的数据。
2、进程
进程是指运行中的程序。
3、程序的工作模式
所有对于硬件的操作用户都无权访问,如果用户运行的程序需要访问硬件时,需要进行系统调用,通过内核来完成对硬件的操作,此时程序将由用户模式转入内核模式。比如:我们想在目录中新建一个文件夹,因为要对磁盘进行写操作,当使用mkdir命令时,就会进行系统调用由内核来完成此操作后再将结果返回给用户。 CPU在其内部的不同区域完成不同的功能:ring0分配给内核(kernel),ring3分配给用户程序(user program)。
二、Linux的多用户,多任务环境
1、内存的分配
Linux对内存采用分段、分页的机制。
物理内存每4k划分成一个页框;页框为物理内存的最小单位。
应用程序运行在自己的地址空间内,这个地址空间称为线性地址空间,所有数据在线性地址空间内部表现为页面的形式存放,而不是分页的数据无法交换至swap空间。
进程访问数据是从线性地址访问,内核将线性地址转换成物理地址,使得进程得以访问到数据。
线性地址与物理地址的对应关系存放在一张表中,这引表在MMU(Memory Management Unit)中进行维护。
内核借助MMU来使得各个进程使用内核时好像是独立的状态;MMU完成线性地址到物理地址的转换。
内核精心编造了一个数据结构,假如内存如果有4G的话,1G分配给内核使用,3G分配给进程使用;这个数据结构使用得每个进程都认为自己独占3G内存。
2、进程调度
调度就是挑选进程到CPU中运行的过程。
进程调度采用的O(1)的算法复杂度,即时间恒定的算法。
CFS:完全公平调度器
3、进程的分类
CPU-Bound(CPU密集型):对于CPU占用率高的进程。
I/O-Bound(I/O密集型):等待I/O时间长的进程
4、进程优先级
CPU挑选进程是根据进程的优先级进行的,进程优先级的取值范围为0-139。
实时优先级:0-99,数字越大,优先级越高;
静态优先级:100-139,数字越小,优先级越高。
用户可以通过调整nice值来改变进程的优先级。
nice值:-20-19 调整静态优先级
进程启动时,默认nice值为0,优先级对应为120。
动态优先级:由内核维护,动态调整。
Linux使用抢占式多任务:当时钟信号到达时,高优先级进程可以抢占CPU。
5、进程状态
运行态:runnnig
睡眠态:sleeping
可中断睡眠:interruptable
不可中断睡眠:uninterruptable,等待外部条件满足之前无法继续运行。
停止态:stopped,不会再被内核调度并运行。
僵死态:zombie,父进程先于子进程结束了,子进程再也不能被停掉的进程。
6、子进程
进程运行是单线运行的,进程中的指令必须顺序执行。
子进程:父进程有无法完成的任务时,启用子进程来执行,此时父进程进入睡眠,子进程执行完成后,返回父进程继续执行。
进程创建机制:每一个进程都是由其父进程fork()自身而来。
7、进程间通信(IPC:Inter Process Communication)
同一主机:
singnal:信号。
shm:共享内存。
semerphor:旗语。
不同主机:
rpc:remote procedure calling,远程过程调用。
socket:IP:port,套接字。
8、CPU虚拟化
就是将CPU切割为时间片(timeslice)。
保存现场:将未执行完成进程状态保存在状态表中。
恢复现场:将状态表中未执行完的进程调出继续执行。
9、线程
线程是比进程更小的可以被单独调度的单位。
线程将进程的任务指令拆分,分配到不同的CPU上同时运行。
不过Linux中的进程都是轻量级进程,已经相当于线程的级别了。
三、Linux进程管理工具
1、查看进程树:pstree
2、显示进程状态:ps
ps命令的选项参数有很多,下面只介绍常用的选项。
因为开源的原因,ps的也存在众多的版本,CentOS6的ps命令支持两种风格:SysV和BSD
SysV:一般带“-”
BSD:不带“-”
选项:
a:与终端相关的进程;
x:与终端无关的进程;
u:显示用户。
组合选项:aux
上图中各字段的含义如下:
USER:进程的发起者;
PID:进程的PID;
%CPU:CPU的占用率;
%MEM:内存的占用率;
VSZ:Virtual memory size,虚拟内存空间大小(线性地址空间大小);
RSS:常驻内存集;不能被交换到swap空间中的所有数据;
TTY:终端;
STAT:进程状态, 包括:
R:running;
S:可中断眨睡眠;
D:不可中断睡眠;
T:Stopped;
Z:Zombie;
s:session leader;
t:前台进程;
l:多线程进程;
N:低优先级进程;
L:高优先级进程。
COMMAND:包含在方括号中的进程表示为内核线程。
组合选项: -ef
-e:显示所有进程;
-f:显示完整格式的信息。
组合选项:-eFH
-F:显示额外信息;
-H:显示进程的层次结构。
-o:自定义要显示的信息。
ni:nice值;
pri:优先级;
psr:运行的CPU。
3、显示指定进程的进程号:pgrep
常用选项:
-u USERNAME:仅显示由指定用户启动的进程;
-U UID:仅显示由指定用户启动的进程;
-G GID:仅显示由指定组启动的进程;
-t terminal:仅显示指定终端相关的进程;
-l:同时显示进程号和程序名。
4、显示指定命令所启动的进程的ID:pidof
5、实时监控进程:top
直接输入top命令,出现以下界面:
可以在上面的界面中直接使用命令来对显示内容进行控制:
M:根据内存百分比进行降序排序,对应的列为%MEM;
P:根据CPU百分比进行降序排序,对应的列为%CPU;
T:根据累积占用的CPU时间降序排序,对应的列为TIME+;
l:显示或不显示负载信息,即上图中第一行的内容,如下图所示:
这一行的内容表示:
10:32:08:当前系统时间;
up 18:42:服务器连续运行的时长为18小时42分钟;
4 users:当前登录系统的用户数;
load average:过去1分钟、5分钟、15分钟的平均负载
t:显示或不显示进程及CPU相关的信息,如下图所示:
上图为不显示进程及CPU信息的结果。
1:数字,分别显示各CPU的相关信息;
使用数字1可以查看不同的CPU的信息,下面说明各字段具体的含义:
us:user space,用户运行程序时间百分比;
sy:system,用于运行内核所占用CPU的百分比;
ni:nice,用户进程空间内改变过优先级的进程占用CPU百分比;
id:idle,空闲CPU百分比;
wa:wait io,等待IO花费的时间;
hi:hardware interrupt,硬中断占用CPU的百分比;
si:software interrupt,软中断占用CPU的百分比;
st:stolen,偷走的时间百分比。
m:显示或不显示物理内存和交换内存信息,如下图所示:
各字段含义如下:
Mem:物理内存;
Swap:交换分区;
buffers:缓冲区,用于减少进程之间的等待时间;
cache:CPU与内存之间的高速缓存,用于减少CPU的等时间。
k:终止指定进程;
s:修改刷新时间间隔;
q:退出。
常用选项:
-d #:指定刷新时间间隔;
-b:以批次的方式显示top刷新;
-n #:显示的批次;
-p PID:监控指定进程。
查看指定进程:
6、显示虚拟内存统计信息:vmstat
各字段含义如下:
procs:
r:运行队列的长度;
b:被阻塞(等待IO完成)队列的长度。
memory:
swpd:从物理内存交换至swap中的数据量;
free:空闲物理内存;
buffer:缓冲,与写相关,加速写操作;
cache:缓存,与读相关,加速读操作。
swap:
si:swap in,数据进入swap中的数据速率,单位kb/s;
so:swap out,数据离开swap中的数据速率。
io:
bi:block in,从块设备读入的数据速率,单位kb/s;
bo:block out,保存至块设备的数据速率。
system:
in:interrupt,中断速率;
cs:context switch,进程切换速率。
CPU:
各字段含义与top中所表示的含义相同,此处不再赘述。
常用选项:
-s:显示内存统计数据。
7、系统资源统计工具:dstat
命令选项:
-c:查看cpu的统计数据
-d:显示磁盘的统计数据;
-D DISK:只显示指定disk的统计数据;
-g:显示page的统计数据;
-i:显示中断的统计数据;
-m:显示内存的统计数据;
-l:显示系统负载的统计数据;
-n:显示网络接口相关统计数据;
-N INTERFACE:显示指定网络接口的统计数据;
-s:显示交换内存统计数据;
–ipc:显示ipc消息队列、信息和共享内存的使用状况;
-y:显示系统状态数据;
-cdngy:相当于不带参数的dstat,也相当于-a
-t:显示时间;
网络连接状态统计:
–tcp:显示tcp的个数及状态;
–udp:显示udp的个数及状态;
–unix:本地通信时unix文件的个数;
–raw:raw sockets;
-f:以完整格式显示所有信息
-v:类似于vmstat命令;
命令用法比较简单,就不做过多的演示了。
四、调整nice值
只有管理员可以使用小于0的nice值,普通用户调整nice值时只能增加,即只能把优先级调低。
1、直接启动一个进程,并指定其nice值:
2、调整已运行的进程nice值
五、进程间通信
1、显示常用信号:kill -l
2、查看各个信号的作用:man 7 signal
3、信号的调用方式
每个信号都可以使用三种方式之一在kill中进行调用:
1)数字代称:1,2,9,15;
2)信号完整名称:SIGHIP,SIGINT,SIGKILL,SIGTERM;
3)信号简称:HUP,INT,KILL,TERM;
常用信号的含义:
1) SIGHUP:让程序重读配置文件,而无需重启程序;
2) SIGINT:interrupt,相当于ctrl+c,打断正在运行中的前台程序;
9) SIGKILL:强制终止进程;
15) SIGTERM:正常终止进程,默认选项。
4、信号调用的格式
1、kill [-SIGNAL] PID
终止所有httpd的进程。
2、killall [-SIGNAL] COMMAND
五、Linux作业控制
前台作业:通过终端启动,并在终止之前一直占据着终端;
后台作业:作业启动之后即运行于后台,释放前台;
交互式模式:手动启动的非守护进程类的程序,一般都运行于前台。
将作业运行于后台:
1、将运行中的作业送往后台
Ctrl+z:将作业送往后台,并处于停止状态。
2、将尚未启动的作业直接在后台运行
COMMAND &
这种手动方式控制的作业与终端相关,如果正在运行作业的终端被退出了,作业会被终止;如果想要在终端退出后作业依然在后台运行,则需要使用下面的命令:
nohup COMMAND &
查看当前正在运行的作业:
三个字段从左至右分别代表:作业号、作业状态、作业命令。
作业控制命令:
fg [[%]jobnum]]:将指定的作业调回前台;
bg [[%]jobnum]]:让送往后台的作业在后台继续运行;
kill %jobnum:终止指定的作业。
原创文章,作者:petmaster,如若转载,请注明出处:http://www.178linux.com/2606
评论列表(1条)
字体,内容,样式,主次,样样具全,不得不赞