Linux系统学习(五)

- Linux进程管理

系统调用(system call): 运行在用户空间的程序向操作系统内核请求系统资源

(获得更高权限);系统调用提供给用户程序与操作之间的接口

内核功能:进程管理,文件系统,网络功能,内存管理,驱动程序等等

程序: 通常是个二进制程序,放置存储介质中(内存/硬盘等),以实体文件存在

进程:正在运行的程序;进程获取到的系统资源由执行者决定;程序(代码)会被加载到内存执行

操作系统会给每个进程分配一个内存单元(识别码)

- 进程的定义:程序运行的实例,系统上的每个程序都会运行在进程的上下文中

- 进程出现的目的:是为了更好的利用CPU资源

举例: A执行任务(读取数据)B想要执行任务,需要等待CPU资源空闲;当有了进程之后

A执行任务(读取数据),进行"上下文件切换"A需要保存当前进程状态);

B可以直接执行任务,当A任务完成后,cpu占用还给A (恢复A之前进程状态)

- 进程拥有独立的内存空间;对我们来看:进程好似独占CPU

线程

协程

进程创建:

INIT进程: PID(1|0)的父进程

父子进程: 进程都是由其父进程创建的(调动fork()函数)

进程优先级:

0-99: 实时优先级,数字越小,优先级越低

100-139: 静态优先级,数字越小,优先级越高

表现形式:通过Nice(-20,19)

进程类型:

前台进程:跟终端相关,通过终端启动的进程

守护进程:在系统引导过程中启动的进程(也可以自定义守护进程:daemon()),跟终端无关

Note: 前台进程也可以发往后台,以守护进程模式运行

进程状态:

运行态:running

就绪态:ready  

睡眠态:

可中断: interruptable

不可中断: uninterruptable

停止态:stopped 暂存于内存中,但是不会被调度,除非手动启动

僵尸态:Zombie

僵尸进程:简单来说:就是有些进程已经运行完结束,但是占用的系统资源没有被回收

进程分类:

CPU - Bound

IO - Bound : 不占用cpu

- 进程管理工具: ........

pstree命令:显示进程树

常用参数:

-g : 显示子进程Pid

-p :显示Pid

-s :显示父进程信息

ps命令: report a snapshot of the current processes (输出当前系统进程信息)

- Linux系统各进程的相关信息均会保存到/proc/PID/目录的各文件中

常用组合:aux

a : 与终端相关的进程

x :与终端无关的进程

u : 以用户为中心组织进程状态信息显示

USER  PID      %CPU        %MEM        

用户 pid号  CPU占用情况   内存占用情况

VSZ :虚拟内存集

RSS :常驻内存集

TTY :终端

STAT : 进程状态  

R: Running

S: interruptable

D: uninterruptable

T: stopped

Z: Zombie

+: 前台进程

l: 多线程进程

N:低优先级进程

<: 高优先级进程

s: session leader

START : 启动时间   

TIME :运行占用CPU的累积时长

COMMAND :由哪个命令来启动的相关进程

常用组合2ps -ef

e : 显示所有进程

f :显示完整格式程序信息

常用组合3ps -eFH

F : 显示完整格式进程信息

H :  以进程层级格式显示进程相关信息

常用组合4ps eo, axo (输出自定义信息)

To see every process with a user-defined format:

    ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

    ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

    ps -Ao pid,tt,user,fname,tmout,f,wchan

自定项: STANDARD FORMAT SPECIFIERS(man手册中这一段帮助文档)

top命令: 实时显示Linux processes

top - 02:43:53 up 48 min,  1 user,  load average: 0.00, 0.01, 0.05

02:43:53 up 48 min : 开始运行的时间 up 当前已经运行的时间

 1 user : 登录用户数量

 load average: 0.00, 0.01, 0.05 CPU平均负载; 1|5|15分钟的平均负载信息(uptime命令也可)

Tasks: 121 total,   2 running, 119 sleeping,   0 stopped,   0 zombie

进程任务数量 正在运行状态 睡眠状态 停止状态 僵尸状态

%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

cpu占用相关信息:

us: 表示用户态的CPU时间比例

sy:表示内核态的CPU时间比例

ni:运行低优先级进程的CPU时间比例

id:空闲CPU时间比例

wa:处于IO等待的CPU时间比例

hi hard interrupt: 处理硬中断的CPU时间比例

si soft interrupt: 处理软中断的CPU时间比例

st steal:当前系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间比例

KiB Mem :   997980 total,   539524 free,   100820 used,   357636 buff/cache

内存  总量  空闲  使用量 buffer/cache 可用量

KiB Swap:  2097148 total,  2097148 free,        0 used.   711396 avail Mem

交换内存    总量    空闲量   使用量  可用量  

内置命令:

排序:

P: 以占用CPU百分比排序

M: 以占用内存百分比排序

T: 以累积占用CPU时长排序

首部信息提示:

uptime信息: l命令

taskcpu信息: t命令

CPU分别显示信息: 1(数字)

memory信息: m命令

修改刷新时间间隔: s 命令(默认是3s刷新一次)

终止指定进程:k命令

退出命令: q命令

选项:

-d #:指定刷新时间间隔 默认为3s

-b:以批次方式显示

-n #:显示多少批次

htop命令:

内置命令:

s:跟踪选定进程的系统调用

l:显示选定进程打开的文件列表

[: 将选定的进程绑定至某个指定的CPU核数上

选项:

-d #: 指定延迟时间

-u username: 仅显示指定用户的进程

-s CLOOMN: 以指定的字段进行排序

vmstat命令:

-n [延时|次数] : 每个多长时间输出一次;一共输出n

-s : 显示内存统计信息

vmstat 5 2

输出信息:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 2  0      0 535084   2108 357696    0    0    14     7   26   24  0  0 100  0  0

rrunning

buninterruptable

swapd: 交换内存总量

...

si: 数据进入swap中的速率

so:数据离开swap中的速率

bi:数据从块设备到系统的速率

bo:数据从系统到块设备的速率

ininterrupts 中断速率

cs: context switch 上下文切换速率(进程切换速率)

kill命令:向进程发送控制信号,以实现进程管理

显示当前可用信号: kill -l

常用信号:

1) SIGHUP : 让进程无需退出而重新读取配置文件

2) SIGINT : 终止正在运行的进程

9) SIGKILL:杀死正在运行的进程

15) SIGTERM: 终止正在运行的进程

指定信号的方式:

信号的数字标识(*)

信号的完整名称

信号的简称

向进程发起信号:

kill [-Signal] PID

终止"名称"之下的所有进程

killall [-Signal] Promgram

进程优先级调整:

静态优先级: 100-139 可以手动修改

进程默认启动时的nice值为0,优先级120

修改:

nice命令:Usage: nice [OPTION] [COMMAND [ARG]...]

renice命令:

Usage:

 renice [-n] <priority> [-p|--pid] <pid>...

 renice [-n] <priority>  -g|--pgrp <pgid>...

 renice [-n] <priority>  -u|--user <user>...

[ ~]# renice -n 5 -p 2310

2310 (process ID) old priority 0, new priority 5