进程理论和相关工具的使用

内核的功用

进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等 
    Process: 运行中的程序的一个副本,是被载入内存的一个指令集合 
进程ID(Process ID,PID)号码被用来标记各个进程 
    UID、GID、和SELinux语境决定对文件系统的存取和访问权限, 
通常从执行进程的用户来继承 
    存在生命周期 
task struct:
    Linux内核存储进程信息的数据结构格式 
task list:
    多个任务的的task struct组成的链表 
进程创建: 
    init:第一个进程  centos6       centos7上使用的是 systemd
父子关系 
    进程:都由其父进程创建
    CoW fork(), clone()

进程优先级: 
系统优先级:数字越小,优先级越高 
    0-139(CentOS4,5) 
各有140个运行队列和过期队列 
    0-98,99(CentOS6) 

实时优先级: 
    99-0:值最大优先级最高 

nice值:
    -20到19,
    对应系统优先级100-139或99 
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负责转换线性和物理地址 
    TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存 
    IPC: Inter Process Communication 
同一主机: 
    signal:信号 
    shm: shared memory 
    semaphore:信号量,一种计数器 
不同主机:
    rpc: remote procedure call 
    socket: IP和端口号

进程状态

Linux内核:抢占式多任务
进程类型: 
    守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程  (在终端执行程序不影响,开机自动启动的叫守护进程)
    前台进程:跟终端相关,通过终端启动的进程 (终端被占用,无法进行其它操作)
注意:两者可相互转化 
进程状态: 
    运行态: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 – display a tree of processes 
ps: process state 
ps – report a snapshot of the current processes 
Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中(每PID代表每一个进程)

top 

排序:(进入命令后) 
P:以占据的CPU百分比,%CPU 
M:占据内存百分比,%MEM 
T:累积占据CPU时长,TIME+ 
首部信息显示: (进入命令后) 显示或隐藏
uptime信息:l命令 
tasks及cpu信息:t命令 
cpu分别显示:1 (数字)  显示总的,还是单个显示(多核)
memory信息:m命令 
退出命令:q   (下面都在命令当中修改刷新间隔)
修改刷新时间间隔:s  输入s  再指定PID
终止指定进程:k 
保存文件:W

栏位信息简介  CPU
us:用户空间 
sy:内核空间 
ni:调整nice时间 
id:空闲 
wa:等待IO时间 
hi:硬中断 
si:软中断(模式切换) 
st:虚拟机偷走的时间

在命令输入之前就指定相关参数
选项: 
   -d #: 指定刷新时间间隔,默认为3秒 
   -b: 全部显示所有进程 
   -n #: 刷新多少次后退出

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

htop 

    top的增强版(要安装)

htop命令:需从Fedora-EPEL源安装 http://172.16.0.1/fedora-epel/7/x86_64 
选项: 
-d #: 指定延迟时间; 
-u UserName: 仅显示指定用户的进程 
-s COLUME: 以指定字段进行排序 
子命令: 
s: 跟踪选定进程的系统调用 
l: 显示选定进程打开的文件列表 
a:将选定的进程绑定至某指定CPU核心 
t: 显示进程树

ps 

ps [OPTION]… 
支持三种选项: 
  UNIX选项 如-A -e 
  BSD选项 如a 
  GNU选项 如–help 

选项:默认显示当前终端中的进程 
a 选项包括所有终端中的进程 
x 选项包括不链接终端的进程 
u 选项显示进程所有者的信息 
f 选项显示进程的父进程 
k|–sort 属性 对属性排序 
o 属性… 选项显示定制的信息 
pid、comm、%cpu、%mem、state、tty、euser、ruser

进程管理工具
VSZ: Virtual memory SiZe,虚拟内存集,线性内存  (操作系统承诺给你多少内存给你分配了)
RSS: ReSident Size, 常驻内存集  (真正物理内存分配出来的大小)
STAT:进程状态 
R:running 
S: interruptable sleeping  可中断的休眠
D: uninterruptable sleeping 
T: stopped 
Z: zombie 
+: 前台进程 
l: 多线程进程 
L:内存分页并带锁 
N:低优先级进程 
<: 高优先级进程 
s: session leader,会话(子进程)发起者

常用组合:-ef  
-e: 显示所有进程 
-f: 显示完整格式程序信息 
常用组合:-eFH 
-F: 显示更完整格式的进程信息 
-H: 以进程层级格式显示进程相关信息 
常用组合:自定义 
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm 
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
euid  正在执行的用户(SUID实别不出来)
ruid  真正执行的用户(SUID实别出来)

进程优先级
ni: nice值 
pri: priority 优先级 
psr: processor  CPU编号 
rtprio: 实时优先级 
示例:ps axo pid,cmd,psr,ni,pri,rtprio
pri  nice优先级 默认19
psi 系统优先级 默认0

进程优先级调整: 
静态优先级:100-139 
进程默认启动时的nice值为0,优先级为120 
只有根用户才能降低nice值(提高优先性) 

nice命令: nice [OPTION] [COMMAND [ARG]…] 
renice命令: renice [-n] priority pid… 
例:renice -n 10 pid 
注:root用户可以随意调整大小
基本用户调整,只能调大
查看: ps axo pid,comm,ni
可能在创建文件时,直接给定优先级
例: nice -n 5  vim xdg

搜索进程
最灵活:ps 选项 | 其它命令 
按预定义的模式:pgrep 
pgrep [options] pattern 
-u uid: effective user 生效者 
-U uid: real user 真正发起运行命令者 
-t terminal: 与指定终端相关的进程 
-l: 显示进程名 
-a: 显示完整格式的进程名 
-P pid: 显示指定进程的子进程 
注:pgrep -lu wang 
u 后面要直接跟用户 (顺序不能的换)

按确切的程序名称:/sbin/pidof 
pidof bash
查看PID

例:ps -C f1.sh -C f2.sh  o  pid,cmd,%cpu,%mem
-C 指定文件名
查看多个进程
注:在脚本当中,shebang机制 –> #!/bin/bash
要加入,不加的话,在ps查看进程的时候,查看不到f1.sh这个名字,只能看到bash
注:跟pgrep不同

kill命令 

向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,
信号名称以SIG开头(可省略),不区分大小写 

显示当前系统可用信号: kill –l,trap -l 
常用信号:man 7 signal 
1) SIGHUP: 无须关闭进程而让其重读配置文件 
2) SIGINT: 中止正在运行的进程;相当于Ctrl+c 
3) SIGQUIT:相当于ctrl+\   相当于quit
9) SIGKILL: 强制杀死正在运行的进程 
15) SIGTERM:终止正在运行的进程    默认的信号(有些进程终止不了)
18) SIGCONT:继续运行 
19) SIGSTOP:后台休眠 
注: kill -0  PID   不发任何信号,判断当前进程是否正常运行
正常运行 echo $?  –> 0

指定信号的方法: 
(1) 信号的数字标识:1, 2, 9 
(2) 信号完整名称:SIGHUP 
(3) 信号的简写名称:HUP
注:在传输信息的时候,上面的三种方式都可以表示出来

按PID:
kill [-SIGNAL]  pid … 
kill –n SIGNAL pid
kill –s SIGNAL pid 
其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。
按名称:
killall [-SIGNAL]  comm… 
例: killall -0 httpd  &> /dev/nul || service httpd restart
       -0信号检查该进程是否启动

killall命令用于杀死指定名字的进程(kill processes by name)。
我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,
我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一。
killall 信号  commond

按模式:
pkill [options] pattern 
-SIGNAL -u uid: effective user,生效者 
-U uid: real user,真正发起运行命令者 
-t terminal: 与指定终端相关的进程 
-l: 显示进程名(pgrep可用) 
-a: 显示完整格式的进程名(pgrep可用) 
-P pid: 显示指定进程的子进程

vmstat

命令:虚拟内存信息 

vmstat [options] [delay [count]] 
例:vmstat  2  5  显示内存信息  刷新间隔2s  刷新5次结束

procs: 
r:可运行(正运行或等待运行)进程的个数,和核心数有关 
b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度) 

memory: 
swpd: 交换内存的使用总量 
free:空闲物理内存总量 
buffer:用于buffer的内存总量 
cache:用于cache的内存总量

swap: 
si:从磁盘交换进内存的数据速率(kb/s) 
so:从内存交换至磁盘的数据速率(kb/s)
注:相对于内存来说
io:
bi:从块设备读入数据到系统的速率(kb/s) 
bo: 保存数据至块设备的速率
注:相对于内存来说

system: 
in: inter rupts  中断速率,包括时钟 
cs: context switch  进程切换速率 

cpu: 
us:Time spent running non-kernel code 
sy: Time spent running kernel code 
id: Time spent idle. Linux 2.5.41前,包括IO-wait time. 
wa: Time spent waiting for IO.  2.5.41前,包括in idle. 
st: Time stolen from a virtual machine.  2.6.11前, unknown. 

iostat

统计CPU和设备IO信息 

示例:iostat 1 10    刷新间隔1s  刷新10次结束
例:
Device:    tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
     每秒钟的事务   读速度       写速度       总量读    总量写

pmap命令:进程对应的内存映射(显示进程使用哪块内存空间) 
pmap [options] pid […] 
     -x: 显示详细格式的信息 
例:pmap -x 1    1:PID
     或pmap  1
另外一种实现: 
    cat /proc/PID/maps

原创文章,作者:_xddggg,如若转载,请注明出处:http://www.178linux.com/85536

(0)
_xddggg_xddggg
上一篇 2017-08-28
下一篇 2017-08-28

相关推荐

  • vim编辑器

    vim编辑器: 文本编辑器:文本,纯文本,ASCII text;Unicode; 文本编辑种类:                 行编辑器:sed                全屏编辑器:…

    2017-04-17
  • N26-第一周博客作业

    第一周博客作业 一、计算机的组成及其功能 计算机的组成可分为硬件、软件两部分。 硬件部分: 按冯.诺伊曼提出的计算机体系,计算机可分为五个部分,分别是:控制器、运算器、存储器、输入设备、输出设备。 CPU:由运算器及控制器组成。 控制器:发出决策指令,协调和指挥计算机各部件的工作。 运算器:对数据进行加工,主要进行算数运行、逻辑运算。 存储器:分为内存储器和…

    2017-02-17
  • httpd服务归纳:网络服务基础篇

    一、网络传输基础     1. 套接字:两类          1) Unix Sock: 一种本地文件系统          2) Socket: IP port (I…

    Linux干货 2015-05-04
  • DNS 笔记

    Ø DNS查询。工作流程如下图         n  客户端的DNS:8.8.8.8 /etc/hosts  14.215.177.38 www.baidu.com n  客户端访问www.baidu.com 不用向DSN服务器发生查询,只需要查询本地的 /e…

    Linux干货 2016-08-15
  • 修复引导启动

    修复MBR 备份MBR: dd if=/dev/sda of=/root/mbr.bak  bs=1  count=512  破坏 dd if=/dev/zero of=/dev/sda  bs=1 count=446 这里只要小于等于446即可。 借助安装光盘修复 装入光盘,在光盘引导界面选择 然后全部默认进入救援命令界面 切换根目录 使用grub-ins…

    2017-12-24
  • 一切皆文件——Linux基本命令(1)

    1.一切皆文件 在dev下有很多硬件的文件 sr0是光驱 console是终端,也划为一个文件   2.查看终端   3.两个终端发信 首先右键选择Clone Session,新客隆了一个centos6 分别使用tty命令查看终端名。 分别为0和1 通过命令:echo “想发送的信息“ > 终端名 即可发送 在0中输入命令: 在1中…

    Linux干货 2017-07-13