init不能代表系统完成一些内核特权的执行!但由他负责向内核提交
他是总的由用户管理的总进程,它会照自己样子创建一个子进程,除了init以外,所有的进程都是由其父进程创建! init是由 上帝(kernel)创造出来的
父进程如何创建子进程,是 fork 自身而来!父进程在创建子进程时是使用同一段内存空间!
内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能
Process: 运行中的程序的一个副本,是被载入内存的一个指令集合
进程ID(Process ID,PID)号码被用来标记各个进程
UID、GID、和SElinux语境决定对文件系统的存取和访问权限,
通常从执行进程的用户来继承
存在生命周期
Linux内核存储进程信息的固定格式:task struct
多个任务的的task struct组件的链表:task list
进程创建: init:第一个进程父子关系
进程:都由其父进程创建
fork(), clone() 进程优先级: 系统优先级:数字越小,优先级越高
0-139(CentOS4,5)
各有140个运行队列和过期队列
0-98,99(CenOS6)
实时优先级: 99-0:值最大优先级最高
Nice值:-20,19对应系统优先级100-139或99
Nice值:
-20,19 Big O:时间复杂度,用时和规模的关系 O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n) 进程内存:
Page Frame: 页框,用存储页面数据,存储Page 4k
LRU: Least Recently Used 近期最少使用算法,释放内存物理地址空间和线性地址空间
MMU:Memory Management Unit负责转换线性和物理地址
事实上应用程序是不可能访问硬件(包括内存),内核就是为了完成资源分配的,会把内存切割成固定大小的片段分配给各个应用使用大小为 4K!内核分配多个不连续的内存,并把它们假装成连续的(用一个中间层!使应用假装跑在连续的内存中) IPC: Inter Process Communication 进程之间的通信
同一主机上:
signal 发信号shm: shared memory 使用共享内存,读其他进程的内存空间
semerphor 发一个短小的信号!
不同主机上:
rpc: remote procecure call 远程过程调用socket: 基于套接字通信!
首先创建一个 socket 文件 :一端保存着自己的端口,还保存有对方的通信端口 进程关闭了就把这个关闭 Linux内核:抢占式多任务 进程类型:
守护进程: 在系统引导过程中启动的进程,跟终端无关的进程;
前台进程:跟终端相关,通过终端启动的进程
注意:也可把在前台启动的进程送往后台,以守护模式运行;
进程状态:运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:暂停于内存中,但不会被调度,除非手动启动之;stopped
僵死态:zombie
进程的分类: CPU-Bound:CPU密集型,非交互IO-Bound:IO密集型,交互 系统进程管理工具
Linux系统状态的查看及管理工具: pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
pstree命令pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观。
显示当前所有进程的进程号和进程id
pstree -p
[root@qzx /etc/yum.repos.d ]# pstree -psystemd(1)─┬─ModemManager(789)─┬─{ModemManager}(807)
│ └─{ModemManager}(818)
├─NetworkManager(44463)─┬─dhclient(47671)
│ ├─dhclient(47742)
│ ├─{NetworkManager}(44464)
│ └─{NetworkManager}(44467)
├─abrt-watch-log(828)
显示所有进程的所有详细信息,遇到相同的进程名可以压缩显示。
pstree -a
ps 列举进程适用ps来查看进程信息
语法 ps [OPTION]… 支持三种选项:UNIX选项 如-A -e
BSD选项 如a
GUN选项 如―help
默认显示当前终端中的进程
a 选项包括所有终端中的进程
x 选项包括不链接终端的进程
u 选项显示进程所有者的信息
f 选项显示进程的父进程
o 属性… 选项显示定制的信息:
pid、comm、%cpu、%mem、state、tty、euser、ruser
常用组合之一:aux VSZ:虚拟内存集;RSS:Resident Size,常驻内存集;
STAT:
R:running
S:interruptable sleeping
D:uninterruptable sleeping
T:Stopped
Z:zombie
+:前台进程
l:多线程进程
N:低优先级进程
<:高优先级进程
s:session leader 常用组合之二:-ef
-e:显示所有进程
-f:显示完整格式的进程信息
-F:显示完整格式的进程信息;
C: cpu utilization
PSR:运行于哪颗CPU之上
-H:以层级结构显示进程的相关信息;
常用组合之三:-eFH 常用组合之四:-eo, axo o field1, field2,...:自定义要显示的字段列表,以逗号分隔;常用的field:pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
ni:nice值;
priority:priority, 优先级;
rtprio:real time priority,实时优先级; 搜索进程 最灵活:ps 选项 | 其它命令 按预定义的模式:pgrep pgrep [options] pattern
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者-t terminal: 与指定终端相关的进程
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示指定进程的子进程
按确切的程序名称:/sbin/pidof
$pidof bash uptime [root@LinServ-1 ~]# uptime
15:31:30 up 127 days, 3:00, 1 user, load average: 0.00, 0.00, 0.00
15:31:30 //系统当前时间
up 127 days, 3:00 //主机已运行时间,时间越大,说明你的机器越稳定。
1 user //用户连接数,是总连接数而不是用户数
load average: 0.00, 0.00, 0.00 // 系统平均负载,统计最近1,5,15分钟的系统平均负载 显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分钟的平均负载,一般不会超过1) 系统平均负载:
指在特定时间间隔内运行队列中的平均进程数。
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。
如果linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。
top: 排序:P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
首部信息显示:uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令
选项: -d #:指定刷新时间间隔,默认为3秒;-b:以批次方式显示;
-n #:显示多少批次;
退出命令:q 修改刷新时间间隔:s 终止指定进程:k 保存文件:W %Cpu(s):对应的那一横栏:
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间
―
黑底的栏位信息简介 PID (Process Id ) : 任务的进程IDPPID (Parent Process Pid) : 父任务的进程ID
RUSER (Real User Name) : 任务的所有者真实名称
UID (User Id) : 任务所有者ID
USER (User Name) : 任务所有者名称
GROUP (Group Name) : 任务所有者群组名
TTY (Controlling Tty) : 终端
PR (Priority):优先级
%CPU (CPU usage) : CPU使用率
%MEM (Memory usage (RES)) : 内存使用率
S (Process Status) : 进程状态
TIME+ (CPU Time, hundredths) : CPU时间,精确到秒 htop命令:需从Fedora-EPEL源安装
http://172.16.0.1/fedora-epel/7/x86_64
选项:-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程;
-s COLUME: 以指定字段进行排序;
子命令:s: 跟踪选定进程的系统调用;
l: 显示选定进程打开的文件列表;