概念:进程,一个活动的程序实体的副本,拥有生命周期,一个进程可能包含一个或多个执行流;
进程的创建进程:
每个进程的组织结构是一致的;
内核在正常启动并且全面接管硬件资源之后,会创建一个Init的进程;而这个名叫init的进程负责用户空间的进程管理;
CentOS5及以前:SysV Init,Classic Init
在启动系统时,Init通过写脚本的方式来创建各个子进程;利用shell来实现,因此其执行速度非常慢;导致系统的启动速度和进程的创建速度都非常慢;
CentOS6:upstart,有Ubuntu研发的新型的Init进程;可以并行的启动某些有关联的服务进程,在创建进程的时候,可以多线创建进程;如果有多个CPU或这有多颗CPU核心的话,其进程的创建速度会有比较明显的变化;第一个进程名称仍然是init;
CentOS7:Systemd,参考了MAC OS的启动逻辑开发一款新版的init程序;其可以以其自身独立完成整个操作系统的启动工作;也就是说,在开机并加载内核之后,只需要启动一个systemd进程就可以将其他各服务进程启动起来,从而引导整个系统启动;
除了init进程之外,其他的各个进程都是由其父进程创建的;由fork()系统调用来实现的;
每个父进程通过fork()系统调用,复制自身的数据给子进程使用;这种复制方式不是立即复制,而是写时复制(CoW);
终止进程:
当计算机开机的时候,内核(kernel)只建立了一个init进程。Linux内核并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。新的进程要通过老的进程复制自身得到,这就是fork。fork是一个系统调用。进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间,当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。
--------------------------------------------------------------------------------------------------------
进程优先级:
0-139
1-99:实时优先级,数字越大优先级越高;在系统启动时启动的进程;
100-139:静态优先级,数字越小优先级越高;在用户执行某些应用程序的时候启动的进程;
nice值:
-20~19:默认的nice值0;
只有管理员才能使用负整数的nice值,以提升进程的优先级;
而普通用户只能使用正整数的nice值,以降低进程的优先级;
划分了140个进程队列;
Big O标准:
O(1),O(logN),O(N),O(N^2),O(2^N)
进程的类型:
按照进程的启动方式:
守护进程:
Daemon,通常是在系统引导的过程被启动的,与任何的终端无关;也可以通过终端启动;
用户进程:
用户登录到系统之后,通过终端启动的进程;
按照进程的运行位置:
前台进程:
在进程启动之后,进程一直占用标准输出或者标准输入或者同时占用标准输出和标准输入;
后台进程:
在进程启动之后,进程不占用标准输出和标准输入;
按照进程对于资源消耗:
CPU-Bond:非交互式的进程;
IO-Bond:编辑器等各种交互式进程;
--------------------------------------------------------------------------------------------------------
Linux系统上与进程有关的命令(查看命令和管理类命令):
pstree:
pstree - display a tree of processes
ps:
ps - report a snapshot of the current processes.
ps [options]
1 UNIX options, which may be grouped and must be preceded by a dash.
2 BSD options, which may be grouped and must not be used with a dash.
3 GNU long options, which are preceded by two dashes.
常用选项:
BSD风格的选项:
a:显示所有与终端相关的进程;
x;显示所有与终端无关的进程;
u:显示发起进程的用户的账户名称;
常用的选项组合之一:aux
ps aux命令显示的结果中各字段的含义:
USER:进程的所有者
PID:进程标识符
%CPU:进程占用的CPU处理时间的百分比;
%MEM:进程占用的物理内存的百分比;
VSZ:虚拟内存集(可交换内存集)
RSS:常驻内存集
TTY:进程与哪个终端相关;?表示与终端无关;
STAT:
R:running,正在运行的进程;
S:interuptible sleeping,可中断的睡眠状态;
D:uninteruptible sleeping,不可中断的睡眠状态;Disk Block;
T:Trace/STOPPED,被跟踪/已停止;
Z:Zombie,僵死态;
+:前台进程
l:包含多线程的进程
<:高优先级进程
N:低优先级进程
s:session leader,有子进程的父进程;
START:进程开始执行的时候时间戳
TIME:进程累计的CPU占用时间;
COMMAND:启动进程的命令行参数;
UNIX风格的选项:
-e:显示所有进程
-f:显示完整格式的进程信息
-F:显示完整格式的进程信息,与-f几乎相同;
常用的选项组合之二:-ef
PPID:父进程PID
C:表示进程占用的CPU时间的百分比
常用的选项组合之三:-eF
SZ:虚拟内存集
RSS:常驻内存集
PSR:表示此进程在哪个CPU核心上运行;
-H:以层级机构显示进程的父子关系;
常用的选项组合之四:-eFH
o|-o field1,field2,...:以自定义字段的方式显示进程相关信息;
field:pid, ppid, ni, rtprio, psr, pcpu, stat, comm, user, tty, vsz, rss,...
常用的选项组合之五:-eo | axo field1,field2,...
... ...