第一、基础知识

MBR引导--内核--内核程序--》协调其它程序

一般内核运行在硬件之上,各应用也在硬件之前

1)OS的基本功能:文件系统、网络功能、进程管理、内存管理、驱动程序、安全功能

以上为通用目的设置的程序。,

程序=指令+数据,

程序运行在内存当中。这个内存由物理内存映射逻辑空间

左则表示二个框分别表示指令和数据。物理内存划分固定大小的页框称为pageframe。

右则下面的方框表示物理内存。每个进程在右则上面的方框中,这部分为假的内存

空间称为线性地址空间。

2)CPU指令:  四个级别ring0,ring1,ring2,ring3

ring0特权敏感指使,ring3环境中为普通指令加减乘除等

控制内存及磁盘数据读取的为特权指令。

特权指令  :

普通指令

3)程序执行环境:

内核模式:运行内核级指令

用户模式:运行普通指令

4)应用程序:

运行在内核代码或应用程序代码

运行普通指令:直接运行于CPU

运行特权指令:通过system call

5)内存:8bits, 1byte

32bit巡址空间s, 2^32, 0-2^32-1, 2^10*2^10*2^10*2^2 bytes =

2^10*2^10*2^2 kilo bytes = 2^10*2^2 MB = 4GB

64bits, 2^64, 4billions 4G

32位 4G: 1G, kernel ,每个应用程序假设自己拥有线性地址空间为4G地址空间

可用,包括自己以及系统内核。1G内核使用,3G为线性地址空间使用。

3G, app

6)ROM+RAM

ROM, RAM

7)地址空间:

物理地址空间

线性地址空间

8)IPC: Inter Process Communication

同一主机:

signal

semerphor

shm (shared memory)

不同主机:

rpc: remote procedure call

socket:

9) 进程调度:

进程运行程序,是程序的一部分

多任务:多进程同时运行

抢占式多任务

10)进程分类:

CPU bound: CPU密集型  (类似高清视频)

I/O bound: IO密集型(编辑器等,频繁IO操作)

11)进程优先级:

140:0-139

1-99:实时优先级,数字越大优先级越高

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

静态优先级 (进程运行时默认自己拥有优先级)

动态优先级(进程运行时平衡优先级)

Linux准备140队列,0优先级在0队列中,1优先级在1队列中

以此类推。当运行时从队列首部开始,选择优先级高的运行。如下图:

每个进程运行的时间不同。Linux支持抢占式多任务,当一个

低先级的程序在运行,这时有一个高优先级的运行。过一段时间后

这里高优先级优先,提前运行。

算法时间复杂度:Big O (衡量标准算法)

O(1)    恒定的,无论优先级,消耗时间相同;(最好的)

O(logn)  每次调度,调度程序需要从树中找出优先级最高的进程

O(n)  线性的

O(n^2)  抛物线机制

O(2^n)  随队列深度增长

12)进程创建:

请求发出者:进程  (由fork进行创建,为系统调用)

任何子进程parent—>为子进行发起一个fork调用—>child

这里child(task struct)与父进行相同。包括进程ID,父进程ID

进程:fork(), clone()

两者的虚拟空间不同,但其对应的物理空间是同一个

示例:父进程P1创建P2子程序,

复制P1的正文段,数据段,堆,栈这四个部分让P2的正文段指向P1的正文

段块,数据段->P2自己的数据段块(为其分配对应的块),堆->P2自己

的堆块,栈->P2自己的栈块。如下图所示:同左到右大的方向箭头表示

复制内容

COW: Copy On Writing   写时复制

内核只为新生成的子进程创建虚拟空间结构,它们来复制于父进程的虚拟

究竟结构,但是不为这些段分配物理内存,它们共享父进程的物理空间,

当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间。

关闭进行调用destroy(销毁某个进行

13)进程的状态:

运行态:running

睡眠态:sleeping

可中断睡眠:interruptible  (中断过程中时可随时唤醒)

不可中断睡眠: uninterruptible  (被IO阻塞的进程)

就绪态:runnable

停止态:stopped,不可被调度为运行状态;

僵死态:zombie

(父进程处理子进程关闭后的状态,如父进程意外关闭后,子进程

处于孤立的状态。这时当子进程停止后为僵死进程)。当父进程关闭

前后利用init ,systemd(centos 7)进程指定为子进程新的父进程。

14)进程管理:

task struct: 用于保存每个进程元数据信息

例如:pid, ppid, memory, thread, files

task list: 用一种称作“链表”的数据结构来保存每个进程的task struct.

进程退出前会将其状态和结果保存到自己的自己的task struct中,下次运行中

直接从tasks struct,这种称为挂起状态

进程切换:context switch

保存现场:

恢复现场:

OS: 提供虚拟的计算机,进而能够将有限资源借助于“保护”机制分配多个

同时运行的程序,即“进程”使用,从而实现了所谓的多任务;

15) 并行处理机制

现代编程采用多线程模型,每个线程单独的功能。单独的执行流

进程: 方块中代表4个内核,4条线条件4个单独线程。并行执行。

该种方式运行在程序独立、相互干扰少的情况下。

线程:tread

共享进程的资源,如父进程、打开文件等;

更轻量的、可被单独调度的运行单元;

LWP:Light Weight Process(Linux是轻量级处理过程,

Linux是线程即进程,进程即线程)

第二、进程命令

Linux进程查看及管理工具:top, pstree, ps, pidof, pgrep, pkill, htop,

glances, pmap, vmstat, dstat, iostat, sar, kill, job, bg, fg

Linux系统上除init以外的所有子进程,都是由其父进程fork()自身而来,

遵循COW机制;进程展现为“进程树”;

1) pstree命令:

进程树查看;

-p: 显示各进程的PID;

centps 7父为systemd            centos 6为init

 

pstree –p 显示进程及id

2)ps: process state

显示的是ps命令执行时,系统上当前进程状态信息的快照 为静态结果;

Linux运行中的内核的相关信息是通过/proc伪文件系统输出的;各进程

都有一个以其PID命名的子目录,每个子目录中有许多文件存储了进程的

相关状态信息;

proc目录下包括进程ID的目录(为正在运行的进程创建该目录)说其

是伪文件系统是因为它是一个映射。每个目录下都包括相应的文件。

 

ps相关命令都是调用该目录下的相关文件。

支持众多选项:

BSD风格  (不需要减号     -

SysV风格 (需要都减号  - 引用)

根据进程启动时是否是通过终端上的用户接×××互式启动的,进程可分为两类:

与终端相关的进程: a

与终端无关的进程: x

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

AA:常用选项组合1:axu  (在centos 7中可用-aux或aux 结果相同)

命令解释:与用户终端相关或无关的进程。

USER       PID %CPU %MEM    VSZ   RSS TTY  STAT START   TIME COMMAND

USER表示进程的属主,那个身份在运行。

pid为进程号

%CPU CPU比例

%MEM  内存百分比

VSZ: Virtual memory Size  线性地址空间占用的空间大小;

RSS:常用驻内存集;指不可以被交换至swap空间的数据占据空间大小;

tty 终端:那个终端启动的此进程 ?表示不知道那个

STAT:进程状态

R: running,运行状态;

S:interruptible sleeping,可中断睡眠

D:uniterruptible sleeping, 不可中断睡眠

T: stopped

Z: zombie

s: session leader (一般为执行命令的bash)

+: 前台进程,占据着某终端

l: 多线程进程

<:>

N: 低优先级进程

START: 启动时间

TIME: 占据CPU累积时长

COMMAND: 启动当前进程或线程的命令行程序,[]表示为内核线程;

BB:常用选项组合2: -ef         -e: 显示所有进程;  (相当前aux)

-f: 显示丰富格式信息fullformat

CC:常用选项组合3:-eFH

-F: 显示额外信息

-H: 以层级形式显示进程间关系;

DD:自定义需要显示的信息:

axo (a代表与终端相关 ,x与终端无关,o可选项)

ps axo pid,command,psr,pri,ni

psr: 当前进程运行的CPU编号;

pri: 当前进程的优先级;

ni: 当前进程的nice值(与进程调整相关)

-20, 19

ppid代表父进程

3)pgrep:  用于过程进程

语法格式:pgrep [OPTIONS] "PATTERN"

-U UID:仅显示以指定用户身份运行的进程;

-G GID

-l: 显示PID和进程名;

示例:显示postfix的用户进程号和名称

4)pidof:

pidof PROGRAM

PROGRAM: 给定命令行程序

显示与程序sshd相关进程id信息

5)top命令:

第1)-4)为静态状态命令,后为动态命令(定时刷新)

有许多交互式的子命令;

第一行top:显示当前系统负载信息。与uptime执行结果相同

说明:启动时间   运行时长  当前登陆用户数量  过去负载状态

0.00,0.001,0.05 代表过1分钟、5分钟、15分钟的负载)

(以上并不是CPU资源的百分比,是队列的长度:多个队列等

待运行)

第二行:tasks:

说明:多个个进程  运行数量    sleeping数量   stop数量   僵死态数量

第三行: CPU百分比

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

us: user space

sy: system (kernel space)

ni: nice

id: idle

wa: wait io  等待IO的百分比

hi: hardware interrupt

si: software interrupt

st: stolen, 被虚拟机“偷走”的百分比

1:平均或单独显示CPU的负载状态;

第四行:内存

KiB Mem :  1877664 total,  1150304 free,   351380 used,   375980 buff/cache

总物理内存      剩余内存    使用的      buffer内存

第五行:交换swap

KiB Swap:  5242876 total,  5242876 free,        0 used.  1337264 avail Mem

交换内存所有空间   空闲空间   已用空间   可用空间

第五行:

pid   用户   优先级  nice值   虚拟内存级  常驻内存级   共享内存  状态

占CPU百分比,占内存百分比 ,累计运行时间,启动运行的命令

显示排序黑CPU百分比进行(默认)

P:以占据的CPU百分比大小排序;

M:以占据Memory空间大小排序;

T:CPU累积占用时间排序;

l: 是否显示系统负载行;(第一行)

队列长度的合理区间:CPU颗数*0.7

t: 是否显示进程摘要信息及CPU负载状态;

m: 是否显示内存相关的状态信息;

s: 修改延迟时长

k: 终止指定进程

q: 退出命令

s: 修改延迟时长

k: 终止指定进程

top命令的选项:

-b: batch,批次显示

-n #: 显示的批次数量

示例:top –b –n 2 显示二批

-d #: 指明延迟时长

示例:top –d 1   表示1秒刷新一次

6)uptime命令: 显示当前系统时间,运行时长,登录用户数及系统平均负载;

命令总结:pstree, ps, pgrep, top, uptime, pidof

7)htop:

需要在epel源当中安装

在/etc/yum.repos.d目录下创建epel.repo文件

内容如下:

利用yum install htop进行安装

交互式命令:

u: 过滤仅显示选定用户的进程;(先U再选择用户)

s: 跟踪选定的进程所发起的系统调用;

l: 显示选定进程所打开的文件;

t: 显示进程的层次结构;

a: 设定进程的cpu亲缘性;(将选定的进程绑定在指定的CPU上)

选项:

-d #: 延迟时长

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

-s COLUMN: 根据指定的字段进行排序;

8)vmstat命令: 状态查看

用法:vmsate [delay [count]]   每隔2秒,显示6次退出

procs: 进程相关状态

r: 运行队列的长度:有数字时等待运行的进程的个数;(队列长度)

b:阻塞队列长度:有数字是表示处理不可中断睡眠状态的进程的个数;

(即IO阻塞队列长度) 单个CPU core 不能大于3基本正常

memory:

swpd: 交换内存使用量;

free: 空间的物理内存量;

buffer: 用于buffer的内存总量;

cache: 用于cache的内存总量;

swap:

si: 数据进入swap中的速率(kb/s) 物理放到交换内存

so: 数据离开swap的速率(kb/s) 交换内存至物理内存

io

bi: 从块设备读入数据到系统的速率(kb/s)

bo: 保存数据至块设备的速率(kb/s)

system

in: 中断速率

cs: 进程切换的速率

cpu

us:    eser space

sy:    system  sy高说明程序有问题,太多系统调用

id:    idle

wa:   waitting   wait过高表示磁盘速率慢

st:   steal

选项:

-s:显示内存的状态统计数据

9)/proc/#接口: (针对proc目录相应进程号下面的文件)

10)pmap: 查看指定进程的内存映射关系;

pmap [OPTIONS] pid...

-x: 显示扩展信息

也可通过cat /proc/#/maps 查看

11)glances: (需要epel源)

使用python开发

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port]

[-P password] [--password] [-t refresh] [-f file] [-o output]

常用选项:

-b: 以Byte/s为单位显示网卡设备数据交换速率;

-d: 关闭磁盘I/O功能模块;

-f /PATH/TO/SOMEFILE:设置输出文件的位置及格式;

-o {HTML|CSV}:

-m: 关闭mount功能模块

-n: 关闭网络功能模块

-r: 关闭进程列表功能模块

-t #: 指定延迟时长,默认为3秒;

-1:单独显示每颗CPU相关负载数据信息;

glances支持远程模式:

即可以以C/S模式工作:

Server: 以监听模式启动glances;

Client: 以远程模式启动glances,远程连入指定服务器,并Server上的相关性能数据;

服务模式:

glances -s -B IPADDR

-B: 用于指明监听的本地地址;

客户端模式:

glances -c IPADDR

-c: 用于连入的服务器的地址;

12)dstat: 整合了vmstat, iostat, netstat and ifstat四款工具的功能;

dstat [-afv] [options..] [delay [count]]

示例   dstat 2 5  #每2秒刷新   显示5次,第6次退出

sysmte下面的 int 是中断   csw指切换上下文

-c: 显示cpu性能指标相关的统计数据;

-d: 显示disk相关的速率数据;

-g: 显示page相关的速率数据;

-i: 显示interrupt相关的速率数据;

-l: 显示load average相关的统计数据;

-m: 显示memory相关的统计数据;

-n: 显示网络收发数据的速率;

-p: 显示进程相关的统计数据,

-r: io请求的速率;

-s: 显示swap的相关数据

-y: 显示系统相关的数据,包括中断和进程切换;

--top-cpu:显示最占用CPU的进程;

--top-bio:显示最消耗block io的进程;

--top-io:最占用io的进程;

--top-mem:显示最占用内存的进程;

--ipc: 显示进程间通信相关的速率数据;

--raw: 显示raw套接的相关的数据;

--tcp: 显示tcp套接字的相关数据;

--udp: 显示udp套接字的相关数据;

--unix: 显示unix sock接口相关的统计数据;

--socket:

-a: -cdngy

IPC: 进程间通信

常见形式:

msg( message queue)   (消息队列)

sem( semerphore) (旗语,很短小的消息)

shm(shared memory)  (共享内存)

signal (标签)

13) signal: 传递给进程的短小信息

Linux主机支持的进程间可用到的信息:

(1) kill -l

(2) man 7 signal

向进程发信号:

kill [-SIGNAL] PID

默认的信号为SIGTERM;

信号表示方式:

(1) 完整名称,例如SIGINT

(2) 简写名称,例如INT

(3) 数据代称,例如2

常用信号:

SIGHUP: 1, 通知进程重读其配置文件以让新的配置生效,但不用重新启动进程;

SIGINT:2, 打断正在运行中的进程,相当于键盘组合键Ctrl+c

SIGKILL:9, 强行中止正在运行中的进程

SIGTERM: 15, 安全中止正在运行中的进程

SIGSTOP: 19, 暂停进程

SIGCONT: 18, 继续运行指定进程

kill相似的一组进程:

killall [-SIGNAL] PROGRAM

示例:启用httpd   service httpd start

查看http的进程号,kill默认是15(安装终止正在运行的进程)

示例:利用数字 kill –9 进程号

示例:kill httpd

命令总结:htop, vmstat, glances, dstat, kill, killall

第三、作业管理:

1)定义

作业是定义的一组具有相同功能的一组进程或程序,称为作业。

通过是否通过终端启动分为

前台作业:通过终端启动,并且在停止之前也会一直占据终端;

后台作业:作业启动之时与终端无关,或者是在前台启动,但启动后转为

与终端无关模式运行; (不是所有命令适合在终端上运行)

如何让作业运行于后台?

1、对于已经启动并处于运行中的作业:

Ctrl+z

Note: 作业被送往后台后,默认处于stopped状态;

示例:运行后使用htop命令,control+z后为stop状态

2、对于尚未启动的作业:

COMMAND &

示例:  vmstat 1 &    将送到后台

注意: 此两类方式相关作业,仍然与终端相关;这意味着,终端终止,将会导

致与此终端相关的所有作业被终止; 与session leader分离

剥离进程与终端的关系:

# nohup COMMAND &

3、守护进程:自动运行在后台

作业查看:

jobs命令

作业号、作业状态、启动命令行程序

作业控制命令:

fg [[%]job_num]:把指定的作业调回前台; 示例:fg %2 表示调后2号作业。或%百分号也可

bg [[%]job_num]:把调往后台的指定的作业启动起来,让其后台默默运行;

但此作业必须支持运行于后台;

kill [%job_num]:终止指定的作业; kill的作业号的百分号%i不能够省略。

4、 进程优先级调整:

AA定义:

优先级级别从0-139  1-99为实时优先级    数字越大优先级越高。

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

内核针对静态优先级进行调整

动态优先级:动态调整

静态优先级:

BB:手动调整优先级,利用nice值

调整时只能够调大nice值

通过指定进程的nice值来调整其优先级;用户 空间运行的进程一般都有其nice值;

nice值: -20, 19

优先级:  100, 139

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

(1) 对于尚未启动的进程:

# nice -n N COMMAND

(2) 对于已经启动并处于运行中的进程:

# renice -n N PID

示例:ps axo pid,command,pri,ni(查看进程号、名称、nice、优先级)

nice -n -5 httpd  调整nice值为-5,输出为

针对已运行的使用renice

 

注意:普通用户仅能够调大nice,调低优先级;

第四:其它命令整理

1)sar :收集、报告用户信息

sar [ options ] [ [ ] ]

Options:

-B 所有page信息

-A  所有信息相当于

-b io速率

示例: sar -u 2 5  CPU利用率

sar -r -n DEV -f /var/log/sa/sa16

显示内存及网络并保存到/var/log/sa/sa16目录

2) iostat,

显示CPU、device及分区信息

iostat [ options ] [ [ ] ]

Options:

-c 显示 CPU      -d 显示设备

示例:iostat 2 5

示例:iostat –c    /  iostat –d

3)ifstat

显示网络接口信息

ifstat [OPTION] [ PATTERN [ PATTERN ] ]

-e erros错误信息

-r reset

示例:

4) tsar;

作业:

命令总结:jobs, fg, bg, nice, renice

博客作业:进程管理工具htop/glances/dstat的使用;

linux进程属主6,20150917 Linux进程查看与管理以及作业管理相关推荐

  1. Linux文件属主显示数字

    今天发现一个很有趣的东西,Linux系统中有一个文件的属主是数字 [root@rac1 ~]# ls -al test -rw-r--r-- 1 111 root 0 Sep 10 04:13 tes ...

  2. linux文件属主,ubuntu linux修改文件所属用户(owner属主)和组(groud属组、用户组)

    linux下select/poll/epoll机制的比较 select.poll.epoll简介 epoll跟select都能提供多路I/O复用的解决方案.在现在的Linux内核里有都能够支持,其中e ...

  3. Linux文件属主和属组 概念

  4. linux 查看java进程_Linux进程查看及管理工具(ps, vmstat, dstat, glances等)

    pstree pstree - display a tree of processes , 进程树查看. [root@localhost /]# pstree systemd─┬─agetty├─au ...

  5. linux 文件夹换所属用户,Linux中账号管理之权限管理(下)

    linux中的账号管理我们在前面两张已经介绍了一些用户和组的相关概念,常用的配置文件,命令的使用.现在我们来看看账号管理中最傲娇的部分就是我们的权限管理. 一.简单介绍权限的概念 以install.l ...

  6. Linux 访问文件的acl信息,linux文件权限管理与ACL访问控制列表

    一.文件属性 1.文件属性: 文件属性操作 chown : change owner  ,设置文件所有者 chgrp : change group  ,设置文件的属组 文件属主修改: chown 格式 ...

  7. linux内核网络钩子函数使用,Linux内核IOCTL网络控制框架实现实例分析

    4.6.inet_ioctl函数 由于inet_ioctl函数内容分支很多,但功能.处理不难理解,所以我把一些不常见的内容都省去,挑简单重要的说,完全在于抛砖引玉: static int inet_i ...

  8. mysql和linux的题目_最强Linux和Mysql面试题套餐,让你的面试无懈可击!

    引言: 大家好,我是一菲,在软件测试当中linux 操作系统和Mysql数据库的内容是十分的知识同时也是十分重要的.所以一菲这两天通过查阅资料等其他方式为大家梳理了liunx和Mysql面试题大礼包, ...

  9. linux配置文件方式创建st01,实用linux命令(一)

    top命令 监控系统的运行状态,并且可以按照cpu.内存.执行时间进行排序. 第一行中,03:30:22是当前时间,up 39 min是系统运行的运行了多长时间,1 user指出了当前有几个用户登录到 ...

最新文章

  1. 如何确定Windows服务器上是否打开了端口? [关闭]
  2. django 创建超级用户时报错 1146
  3. SQLLite (四):sqlite3_prepare_v2,sqlite3_step
  4. 大学4年毕业后我是如何还清的助学贷款。
  5. poj2032Square Carpets(IDA* + dancing links)
  6. 04-Fibonacci
  7. 799元!乐视智能门锁新品Le1S发布
  8. 动态规划-----(思路详解)
  9. springboot调整请求头大小_新手也能看懂的 SpringBoot 异步编程指南
  10. 十分钟读懂 黑客如何入侵Windows 操作系统
  11. 申请 GoDaddy SSL 证书
  12. RTL8111E datasheet中提到的术语
  13. 结构设计到项目管理:工程师是怎么练成的.
  14. favicon.ico显示,favicon显示,favicon图标显示
  15. This scheduler instance is still active but was recovered by another instanc解决办法
  16. cad打印本计算机未配置,CAD点打印为什么会警告提示无法使用此绘图仪配置
  17. Mac电脑的一键切换输入法神器,自动切换输入法!
  18. 9位院士!10所一流大学,迎“新帅”
  19. 华为让全球震惊:5G基站出货已过万
  20. 主题建模-corpora语料库-PCA进行降维

热门文章

  1. suse linux 查看内存,Suse linux查询内存大小的指令是什么?
  2. 【MFC系列-第8天】小型软件项目开发
  3. 技术管理规划-从哪入手?
  4. 微信小程序的scroll-view组件
  5. php关于ob_start('ob_gzhandler')启用GZIP压缩的bug
  6. VBA_Excel_教程:过程,函数
  7. 编写高质量代码-OC 第7章 设计模式与Cocoa编程
  8. MySql默认编码所造成的乱码麻烦1.222
  9. 扩大缩小Linux物理分区大小
  10. js导航条 二级滑动 模仿块级作用域